Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Вы можете повернуть, отразить и изменить изображение, указав точки назначения для верхнего левого, правого верхнего и нижнего левого углов исходного изображения. Три конечных точки определяют аффинное преобразование, которое сопоставляет исходное прямоугольное изображение с параллелограммой.
Пример
Например, предположим, что исходное изображение — прямоугольник с левым верхним углом (0, 0), правым верхним углом (100, 0) и нижним левым углом (0, 50). Допустим, эти три точки отображаются в соответствующие точки назначения указанным ниже образом.
Исходная точка | Точка назначения |
---|---|
Верхний левый (0, 0) | (200, 20) |
Верхний правый (100, 0) | (110, 100) |
Слева внизу (0, 50) | (250, 30) |
На следующем рисунке показан исходный образ и изображение, сопоставленное с параллелограммой. Исходное изображение было отклонено, отражено, вращено и переведено. Ось x вдоль верхнего края исходного изображения сопоставляется со строкой, которая проходит через (200, 20) и (110, 100). Ось Y вдоль левого края исходного изображения сопоставляется с линией, которая проходит через (200, 20) и (250, 30).
На приведенном ниже рисунке показано такое же преобразование, примененное к фотографическому изображению.
На следующем рисунке показано аналогичное преобразование, примененное к метафайлу.
В следующем примере создаются изображения, показанные на первом рисунке.
Point[] destinationPoints = {
new Point(200, 20), // destination for upper-left point of
// original
new Point(110, 100), // destination for upper-right point of
// original
new Point(250, 30)}; // destination for lower-left point of
// original
Image image = new Bitmap("Stripes.bmp");
// Draw the image unaltered with its upper-left corner at (0, 0).
e.Graphics.DrawImage(image, 0, 0);
// Draw the image mapped to the parallelogram.
e.Graphics.DrawImage(image, destinationPoints);
' New Point(200, 20) = destination for upper-left point of original
' New Point(110, 100) = destination for upper-right point of original
' New Point(250, 30) = destination for lower-left point of original
Dim destinationPoints As Point() = { _
New Point(200, 20), _
New Point(110, 100), _
New Point(250, 30)}
Dim image As New Bitmap("Stripes.bmp")
' Draw the image unaltered with its upper-left corner at (0, 0).
e.Graphics.DrawImage(image, 0, 0)
' Draw the image mapped to the parallelogram.
e.Graphics.DrawImage(image, destinationPoints)
Компиляция кода
Приведенный выше пример предназначен для использования с Windows Forms и требует PaintEventArgse
, который является параметром обработчика событий Paint. Замените Stripes.bmp
на путь к изображению, имеющемуся в системе.
См. также
.NET Desktop feedback