我使用下面的代码将图像以中心点为原点旋转一个角度。
private Bitmap rotateImage(Bitmap b, float angle)
{
Bitmap returnBitmap = new Bitmap(b.Width, b.Height);
Graphics g = Graphics.FromImage(returnBitmap);
g.TranslateTransform((float)b.Width/2, (float)b.Height / 2);
g.RotateTransform(angle);
g.TranslateTransform(-(float)b.Width/2,-(float)b.Height / 2);
g.DrawImage(b, new Point(0, 0));
return returnBitmap;
}
当我尝试在旋转后恢复图像到其初始角度时,问题出现了。我打算通过以(360度)角度再次旋转图像来做到这一点。但这行不通,图像的边缘似乎被切掉了。有没有更好的解决方案来旋转图像在c#。我只是想将图像旋转到一个角度,而不使图像的两侧像差,然后以相反的角度旋转图像以取消应用的旋转,因此恢复了之前的图像。
首先,正如在评论中所说,您需要创建一个更大的目标位图来容纳旋转的位图。这将得到正确的新尺寸:
public Size SizeAfterRotation(Size sz, float angle)
{
var m = new Matrix();
m.Rotate(angle);
var pts = new[]
{
new Point(sz.Width, sz.Height),
new Point(sz.Width, 0)
};
m.TransformPoints(pts);
return new Size(
Math.Max(Math.Abs(pts[0].X), Math.Abs(pts[1].X)),
Math.Max(Math.Abs(pts[0].Y), Math.Abs(pts[1].Y)));
}
然后,至于恢复(旋转回)位图,我不建议你尝试这样做。尽量保留原来的位图。这将是棘手的恢复它,如果你成功了,你将失去图像质量无论如何。