Поворот, отражение и отклонение изображений
Изображение можно поворачивать, отражать и наклонять, указывая точки назначения для верхнего левого, верхнего правого и нижнего левого углов исходного изображения. Эти три точки назначения определяют аффинное преобразование, которое отображает исходное прямоугольное изображение в параллелограмм. (Правый нижний угол исходного изображения сопоставляется с четвертым углом параллелограмма, который вычисляется из трех указанных точек назначения.)
Например, предположим, что исходное изображение представляет собой прямоугольник с верхним левым углом в точке (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);
На следующем рисунке показано аналогичное преобразование, примененное к фотографическому изображению.
На следующем рисунке показано аналогичное преобразование, примененное к метафайлу.