Показать сообщение отдельно
  #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. Причина: форматирование кода