【发布时间】:2020-01-24 22:41:15
【问题描述】:
我想围绕给定点旋转位图,并让该点成为位图的新中心。
这是我首先尝试的
Bitmap rotate(Bitmap img, float angle, int cx, int cy)
{
Bitmap result = new Bitmap(img.Width, img.Height);
int middleX = img.Width / 2,
middleY = img.Height / 2;
using (Graphics g = Graphics.FromImage(result))
{
g.Clear(Color.Black);
g.TranslateTransform(cx, cy);
g.RotateTransform(angle);
g.TranslateTransform(-cx, -cy);
g.TranslateTransform(middleX - cx, middleY - cy); //shift (cx, cy) to be at the center, does not work
g.DrawImage(originalImage, new Point(0, 0));
}
return result;
}
但是当我去翻译旋转后的图像时,翻译是在原始空间而不是这个新的旋转空间中,并且不正确。 我基本上尝试了我能想到的每一种组合,但没有运气。搜索结果只描述了如何围绕一个点旋转。
图像旋转 45 度后应平移,使红点成为图像的中心
【问题讨论】:
-
请澄清您所说的“成为位图的新中心”是什么意思。最好提供小样本图像,显示所需操作的“之前”和“之后”。此外,请确保您提供了一个良好的minimal reproducible example,以准确显示您尝试过的内容(如果您提供图像,MCVE 不需要包含位图数据本身,因为可以从发布的图像中获得)。
-
先把点平移到中心,再做旋转!
-
@TaW 我试过了,但没有用。当我再次回到家时,我可以发布我尝试过的代码。
-
未经测试的伪代码:
translate(-red);translate(-center);rotate(angle);translate(center) -
并非如此。这个
g.Clear(Color.Black); g.TranslateTransform(middleX, middleY); g.RotateTransform(angle); g.TranslateTransform(-middleX, -middleY); g.TranslateTransform(middleX - cx, middleY -cy); g.DrawImage(img, 0, 0);也可以使用..