我正在使用以下代码将图像旋转一个角度,以中心点为原点。
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#中旋转图像。我只想将图像旋转到一个角度而不会偏向两侧,然后以反角度旋转图像以取消应用的旋转,以便恢复前一个图像。 / p>
答案 0 :(得分:2)
首先,正如评论中所说,您需要创建一个更大的目标位图来适应旋转的位图。这将为您提供正确的新尺寸:
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)));
}
然后,至于恢复(向后旋转)位图,我不会重新尝试你尝试这样做。请尝试保留原始位图。恢复它会很棘手,如果你成功了,无论如何你都会失去图像质量。