gpt4 book ai didi

c# - 在 C# 中使用 Translate Transform 顺时针和逆时针旋转图像

转载 作者:行者123 更新时间:2023-11-30 17:15:30 26 4
gpt4 key购买 nike

我正在使用以下代码以中心点为原点将图像旋转一个角度。

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)));
}

然后,至于恢复(旋转回)位图,我不建议您尝试这样做。尽量保留原始位图。恢复它会很棘手,如果你成功了,无论如何你都会失去图像质量。

关于c# - 在 C# 中使用 Translate Transform 顺时针和逆时针旋转图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7962530/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com