我有一个相当大的(30MB)图像,我想从中取出一小块“切片”。切片需要表示原始图像的旋转部分。
以下工作但角落是空的,看起来我正在拍摄原始图像的矩形区域,然后将其旋转并将其绘制在未旋转的表面上,从而导致缺角。
我想要的是原始图像上的旋转选择,然后在未旋转的表面上绘制。我知道我可以先旋转原始图像来实现这一点,但考虑到它的大小,这似乎效率低下。
有什么建议吗?谢谢,
public Image SubImage(Image image, int x, int y, int width, int height, float angle)
{
var bitmap = new Bitmap(width, height);
using (Graphics graphics = Graphics.FromImage(bitmap))
{
graphics.TranslateTransform(bitmap.Width / 2.0f, bitmap.Height / 2.0f);
graphics.RotateTransform(angle);
graphics.TranslateTransform(-bitmap.Width / 2.0f, -bitmap.Height / 2.0f);
graphics.DrawImage(image, new Rectangle(0, 0, width, height), x, y, width, height, GraphicsUnit.Pixel);
}
return bitmap;
}
答案 0 :(得分:1)
在决定最佳方法之前,您应该对此进行性能测试,但有两个选项
选项2基本上允许您在比整个图像小的图像上执行旋转。
就像我说的那样,我会做一些不错的性能测试,以确定选项2是否超过选项1是非常值得的。