我需要能够围绕给定点旋转图像,以便图像的任何部分出现在我的容器中心都是旋转中心。
为了计算中心点,我目前只是采用应用于图像的平移的倒数:
Rotate.CenterX = Translate.X * -1;
Rotate.CenterY = Translate.Y * -1;
但是,我正在使用的当前计算是不够的,因为如果图像在旋转后被平移,它就不起作用。
我敢肯定这是一个相当直接的三角函数,我只是想不出它是什么!
干杯
我需要能够围绕给定点旋转图像,以便图像的任何部分出现在我的容器中心都是旋转中心。
为了计算中心点,我目前只是采用应用于图像的平移的倒数:
Rotate.CenterX = Translate.X * -1;
Rotate.CenterY = Translate.Y * -1;
但是,我正在使用的当前计算是不够的,因为如果图像在旋转后被平移,它就不起作用。
我敢肯定这是一个相当直接的三角函数,我只是想不出它是什么!
干杯
如果您正在使用 GDI+,请使用以下命令:
double ImWidth = (double)Im.Width;
double ImHeight = (double)Im.Height;
double XTrans = -(ImWidth * X);
double YTrans = -(ImHeight * Y);
g.TranslateTransform((float)XTrans, (float)YTrans);
g.TranslateTransform((float)(ImWidth / 2.0 - XTrans), (float)(ImHeight / 2.0 - YTrans));
g.RotateTransform((float)Angle);
g.TranslateTransform(-((float)(ImWidth / 2.0 - XTrans)), -((float)(ImHeight / 2.0 - YTrans)));
如果您正在使用 WPF 图形对象,请使用以下变换组:
TransformGroup TC = new TransformGroup();
RotateTransform RT = new RotateTransform(Angle);
RT.CenterX = Im.Width / 2.0;
RT.CenterY = Im.Height / 2.0;
TranslateTransform TT = new TranslateTransform(-X * Im.PixelWidth, -Y * Im.PixelHeight);
TC.Children.Add(TT);
TC.Children.Add(RT);
X 和 Y 是您想要转换图像的百分比值(如果图像是 1000 像素并且 X 是 0.1,那么图像将被转换 100 像素)。这就是我需要该功能工作的方式,但您可以轻松更改它。