我需要能够在给定点周围旋转图像,以便图像的任何部分出现在我的容器中心是旋转中心。计算翻译后的旋转中心
要计算的中心点,我目前只是把应用到图像翻译的倒数:
Rotate.CenterX = Translate.X * -1;
Rotate.CenterY = Translate.Y * -1;
然而,当前计算我使用的是不够的,因为它不工作,如果在被旋转后,图像已被翻译为。
我敢肯定,这是一个相当直接的trig函数,我只是想不出它是什么!
干杯
我需要能够在给定点周围旋转图像,以便图像的任何部分出现在我的容器中心是旋转中心。计算翻译后的旋转中心
要计算的中心点,我目前只是把应用到图像翻译的倒数:
Rotate.CenterX = Translate.X * -1;
Rotate.CenterY = Translate.Y * -1;
然而,当前计算我使用的是不够的,因为它不工作,如果在被旋转后,图像已被翻译为。
我敢肯定,这是一个相当直接的trig函数,我只是想不出它是什么!
干杯
如果您正在使用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像素)。这就是我需要的功能,但是您可以轻易地改变它。
感谢您的回答!我遇到的问题似乎很大程度上是由于我处理单个变换的方式(我添加了其中一个,然后修改它们而不是累积多个变换)。我还没有完成,但现在我更接近了,代码更少! – 2010-01-18 09:32:18
我们需要更多的信息。你怎么做转换?你的坐标系与图像的位置有什么关系? – 2010-01-13 11:54:29
我使用内置的WPF转换函数来处理我的转换。基本上,我有一个TransformGroup,其中包含一个TranslateTransform,RotateTransform和ScaleTransform(按顺序添加)。每次发生一个超链接而不是添加更多转换时,每个链接都会更新。 到目前为止,我设法避免了除了在这里和那里捕获鼠标位置之外的任何坐标... 希望这有助于! – 2010-01-13 12:21:18