旋转、反射和倾斜图像

可通过指定原始图像左上角、右上角和左下角的目标点来旋转、反射和倾斜图像。 这三个目标点确定了将原始矩形图像映射到平行四边形的仿射变换。 (原始图像的右下角映射到平行四边形的第四个角,该角是从三个指定目标点计算得出的。)

例如,假设原始图像是一个矩形,其左上角坐标为 (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); 

下图显示了应用于摄影图像的类似转换。

显示同一照片两次的插图;第二个反转、倾斜,并具有不同的大小、旋转和位置

下图显示了应用于图元文件的类似转换。

插图显示形状和文本,然后再次显示,但反转,倾斜,并具有不同的位置,旋转和大小