Поделиться через


Поворот, отражение и отклонение изображений

Изображение можно поворачивать, отражать и наклонять, указывая точки назначения для верхнего левого, верхнего правого и нижнего левого углов исходного изображения. Эти три точки назначения определяют аффинное преобразование, которое отображает исходное прямоугольное изображение в параллелограмм. (Правый нижний угол исходного изображения сопоставляется с четвертым углом параллелограмма, который вычисляется из трех указанных точек назначения.)

Например, предположим, что исходное изображение представляет собой прямоугольник с верхним левым углом в точке (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[] = {
   Point(200, 20),   // destination for upper-left point of original
   Point(110, 100),  // destination for upper-right point of original
   Point(250, 30)};  // destination for lower-left point of original
Image image(L"Stripes.bmp");
// Draw the image unaltered with its upper-left corner at (0, 0).
graphics.DrawImage(&image, 0, 0);
// Draw the image mapped to the parallelogram.
graphics.DrawImage(&image, destinationPoints, 3); 

На следующем рисунке показано аналогичное преобразование, примененное к фотографическому изображению.

иллюстрация, показывающая одну и ту же фотографию дважды; второй объект имеет обратный, наклонный и имеет другой размер, поворот и расположение.

На следующем рисунке показано аналогичное преобразование, примененное к метафайлу.

иллюстрация, показывающая фигуры и текст, но в обратном порядке, с наклоном и с разным расположением, поворотом и размером