将旋转的图像直接绘制到Graphics对象,而不创建新的Bitmap

时间:2016-07-08 11:27:46

标签: c# image graphics bitmap

我能够通过绘制单独的图形对象来旋转图像,该图形对象绘制单独的位图,然后使用图形对象绘制位图,该图形对象绘制最终图像。这是绘制两个基本相同的图像。我不希望这样。该项目是一个简单的图形引擎,因此绘图时间必须尽可能快。最重要的是,System.Graphics在绘制图像方面并不算太好。

这是我正在使用的代码。它需要一两个改进,但基本方法应该是可见的。

{{1}}

在新的位图上绘制旋转图像需要旋转用于绘图的图形对象。我能做的是将主图形对象传递给方法,旋转它以绘制图像,然后将对象旋转回来。但我不知道为大图像旋转图形是否比为小图像旋转图形更快或更慢。

所以,这会更快 - 将整个图形对象旋转两次(旋转以绘制图像然后向后旋转),或者使用单独的图形绘制旋转的图像,然后使用主图形对象绘制它?是否可以选择旋转图像而无需使用单独的图形对象而无需旋转图形对象?

1 个答案:

答案 0 :(得分:1)

我在上一个项目中做的是这个,这是在Paint事件中,你不需要创建新的位图,只需重置转换并再次绘制图像:

e.Graphics.ResetTransform();
e.Graphics.TranslateTransform(Width/2, Height/2);
e.Graphics.RotateTransform(45f);  //45 degree
e.Graphics.DrawImage(.... //original image

e.Graphics.ResetTransform();
e.Graphics.TranslateTransform(Width/2, Height/2);
e.Graphics.RotateTransform(60f);  //60degree
e.Graphics.DrawImage(.... //original image
...