Добро пожаловать, гость
:: алгоритмы  и методы :: :: олимпиадные задачи :: :: связь :: :: о сайте :: :: форум ::

Форум работает в режиме архива, только для чтения и поиска.
Архив 2004 Архив 2007 Архив 2013

 
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 26.10.2006, 15:29
Новичок

Отправить личное сообщение для Africa Посмотреть профиль Найти все сообщения от Africa
 
Регистрация: 26.10.2006
Сообщений: 2

масштабирование изображения
Есть конструкция размеры которой заданы в реальных единицах измерения (например, в метрах). Нужно масштабировать её по высоте, ширине. Если выполняется масштабирование по высоте (по высоте должна умещаться), то далее необходимо расположить конструкцию по центру доски, в горизонтальном измерении, на которой происходит отрисовка.
По высоте (ширине) масштабировать умею, а вот центрировать что-то не получается.
В коде mpi - количество метров в одном дюйме; dpi - количество точек в одном дюйме; this.Height - высота доски в точках; frameDrawedRect.Width - ширина изображения в реальных единицах измерения...; scale - коэффициент масштабирования; orign - расположение начала координат (здесь в реальных единицах измерения). Там, где стоят вопросики было написано уже много чего...
Код:
  float dpi = Graphics.FromHwnd(Handle).DpiX;         //TODO : Считаем для простоты, что DpiX == DpiY
  float drawBoardHeight = this.Height * mpi / dpi;
  float drawBoardWidth = this.Width * mpi / dpi;
  float drawBoardBorder = 20 * mpi / dpi; //20 - это "бордюр" для доски
  if (scaleType == ScaleType.FitHeight || (scaleType == ScaleType.FitImage && frameDrawedRect.Height >= frameDrawedRect.Width))
    {
        scale = (drawBoardHeight - 2 * drawBoardBorder) / frameDrawedRect.Height;
        orign.Y = -frameDrawedRect.Height;
        orign.X = ?;
    }
    else
    {
        scale = (drawBoardWidth - 2 * drawBoardBorder) / frameDrawedRect.Width;
        orign.X = -frameDrawedRect.Width;
        orign.Y = ?;
    }
Преобразование реальных координат в оконные:
Код:
public PointF GetWindowCoordinates(float rX, float rY)
  {
        float dpi = Graphics.FromHwnd(Handle).DpiX;
        return new PointF((rX + orign.X) * scale * dpi / mpi + 20F, (rY  + orign.Y)* scale * dpi / mpi + 20F);
  }
Спасибо.

Последний раз редактировалось Africa, 26.10.2006 в 15:33. Причина: форматирование кода
  #2  
Старый 26.10.2006, 16:33
MBo MBo вне форума
Местный

Отправить личное сообщение для MBo Посмотреть профиль Найти все сообщения от MBo
 
Регистрация: 21.09.2006
Адрес: Новосибирск
Сообщений: 1,374

Чтобы объект был центрирован в окне по ширине:
ObjectLeft = (WindowWidth - ObjectWidth) / 2
  #3  
Старый 28.10.2006, 16:15
Новичок

Отправить личное сообщение для Africa Посмотреть профиль Найти все сообщения от Africa
 
Регистрация: 26.10.2006
Сообщений: 2

Чтобы решить эту Задачу оказалось нужным выспаться.
Ответ немного посложнее. Смысл, понятно, не меняет, но нужно ничего не забыть.
Код:
orign.X = -frameDrawedRect.Left + (drawBoardWidth - 2 * drawBoardBorder) / (2 * scale) - frameDrawedRect.Width / 2;
 


Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
вопрос по обработке изображения в матлабе Wind Of Change Обработка изображений, звук, графика 0 13.04.2007 22:09
вопрос по обработке изображения tumanovalex Обработка изображений, звук, графика 0 10.04.2007 13:32