我需要能夠在給定點周圍旋轉圖像,以便圖像的任何部分出現在我的容器中心是旋轉中心。計算翻譯後的旋轉中心
要計算的中心點,我目前只是把應用到圖像翻譯的倒數:
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