我有以下功能:
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()
没有被应用?
答案 0 :(得分:5)
您是否尝试将RotateTransform()
放在DrawImage()
之前?
example on the msdn page显示在完成任何绘图之前应用的转换。
答案 1 :(得分:4)
RotateTransform
调用会改变当前的转换矩阵,这会对所有后续操作产生影响。它完全不转换已经输出的操作。对于任何更改变换矩阵的操作(如ScaleTransform
)都是一样的。
确保在之前调用这些来执行您想要转换的操作 - 在这种情况下,在调用DrawImage
之前。
您可以使用它来执行类似
的操作第一个和最后一个绘制输出将不会被转换,但是中间一个将受到旋转和缩放(按此顺序)的影响。