0

我有以下功能:

static private Image CropRotate(Image wholeImage, Rectangle cropArea)
{
    Bitmap cropped = new Bitmap(cropArea.Width, cropArea.Height);

    using(Graphics g = Graphics.FromImage(cropped))
    {
        g.DrawImage(wholeImage, new Rectangle(0, 0, cropArea.Width, cropArea.Height), cropArea, GraphicsUnit.Pixel);
        g.RotateTransform(180f);
    }
    return cropped as Image;
}

它应该裁剪图像,然后旋转生成的子图像。但实际上,它只执行裁剪。

为什么RotateTransform()没有被应用?

4

2 回答 2

5

您是否尝试过将 放在RotateTransform()之前DrawImage()msdn 页面上的示例显示了在完成任何绘图之前应用的转换。

于 2010-11-30T20:18:03.550 回答
4

该调用改变了当前的变换矩阵,这对所有后续操作RotateTransform都有影响。它根本不会改变已经输出的操作。这对于任何改变变换矩阵的操作都是一样的(比如)。ScaleTransform

确保在执行要转换的操作之前DrawImage调用这些 - 在这种情况下,在调用.

你可以用它来做类似的事情

  1. 绘制(不旋转或缩放)
  2. 旋转(只改变变换矩阵)
  3. 比例(仅更改变换矩阵)
  4. 绘制(现在旋转和缩放)
  5. ClearTransform(仅更改变换矩阵)
  6. 绘制(不旋转或缩放)

第一个和最后一个绘制输出不会被转换,但中间的输出会受到旋转和缩放(按此顺序)的影响。

于 2010-11-30T20:23:07.733 回答