Image processing 计算平移后的旋转中心

Image processing 计算平移后的旋转中心,image-processing,rotation,transform,center,Image Processing,Rotation,Transform,Center,我需要能够围绕给定的点旋转图像,以便图像的任何部分出现在容器的中心都是旋转中心 为了计算中心点,我目前只取应用于图像的平移的倒数: Rotate.CenterX = Translate.X * -1; Rotate.CenterY = Translate.Y * -1; 但是,我使用的当前计算是不够的,因为如果图像在旋转后被平移,它将不起作用 我确信这是一个相当直接的触发函数,我只是不知道它是什么 干杯如果您正在使用GDI+,请使用以下选项: double ImWidth = (double)

我需要能够围绕给定的点旋转图像,以便图像的任何部分出现在容器的中心都是旋转中心

为了计算中心点,我目前只取应用于图像的平移的倒数:

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像素)。这就是我需要函数工作的方式,但您可以轻松地更改它。

我们需要更多信息。您是如何进行转换的?坐标系与图像位置的关系如何?我正在使用内置的WPF变换函数来处理变换。基本上,我有一个TransformGroup,它包含TranslateTransform、RotateTransform和ScaleTransform(按该顺序添加)。每次发生转换时都会更新其中的每一个,而不是添加更多的转换。到目前为止,除了在这里和那里捕捉鼠标位置外,我还设法避免在坐标系中做任何事情。。。希望这有帮助!谢谢你的回答!我遇到的问题似乎主要是由于我处理单个转换的方式(我添加了每个转换中的一个,然后修改了它们,而不是累积多个转换)。我还没有完全做到这一点,但我现在更接近了,代码更少了!