Масштабируйте рисунок, чтобы он соответствовал целевой области в C#

Многие программы рисования должны масштабировать чертеж, чтобы он соответствовал целевой области, либо с растяжкой, либо без нее. Следующий метод MapDrawing преобразует объект Graphics, поэтому он сопоставляет прямоугольник чертежа с прямоугольником на объекте Graphics.

Код начинается с сброса преобразований объекта Graphics для удаления любых предыдущих преобразований.

Далее код находит центр прямоугольника чертежа и преобразует его, чтобы он был центрирован в начале координат. Затем, когда код масштабирует чертеж на следующем шаге, он остается центрированным в начале координат.

Затем код масштабирует чертеж. Сначала он находит масштабные коэффициенты, которые заставляют рисунок заполнять целевую область вывода. Тогда, если параметр stretch false, указывая на то, что вы не хотите растягивать результат, код устанавливает оба масштабных коэффициента на меньший из двух. Это делает результат как можно большим, не искажая его.

Затем код масштабирует чертеж. Сначала он находит масштабные коэффициенты, которые заставляют рисунок заполнять целевую область вывода. Тогда, если параметр stretch false, указывая на то, что вы не хотите растягивать результат, код устанавливает оба масштабных коэффициента на меньший из двух. Это делает результат как можно большим, не искажая его.

...

В этот момент объект Graphics настроен, чтобы сделать чертеж в его конечном масштабе с центром в начале координат. Теперь код добавляет преобразование для перемещения центра чертежа (начало координат) в центр целевой области. Снова обратите внимание, что код добавляет это преобразование.

После использования этого метода для применения этих преобразований к объекту Graphics все, что вы рисуете на нем, будет соответствующим образом отображено на целевой прямоугольник.

Следующий код показывает, как программа использует метод MapDrawing для рисования изображения, показанного выше.

Метод DrawSmiley использует эллипсы и дугу для рисования смайлинки в области (-1, -1) - (1, 1). Это просто, поэтому здесь не показано. Загрузите пример, чтобы увидеть, как он работает.

Обработчик событий Paint RectangleF с именем smiley_rect, чтобы представить область, в которой должен быть нарисован смайлик. Он также делает переменные wid и hgt для измерения половины клиентской области формы (минус 1, так что вещи подходят по краям).

Источник: http://csharphelper.com/blog/2014/11/scale-a-drawing-so-it-fits-a-target-area-in-c/

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Adblock
detector