C# Graphics影象旋轉與繪圖總結
阿新 • • 發佈:2019-02-18
1.計算出來旋轉後的大矩形,並且在裡面畫出原始矩形(原點在左上角0,0)
dW
dH
W = (int)(dH * dSin + dW * dCos);
H = (int)(dW * dSin + dH * dCos);
2.找一個合適的旋轉點
g.TranslateTransform((float)(dH * dSin), 0);
3.然後進行旋轉角度,負數逆時針旋轉,正數順時針旋轉
g.RotateTransform(angleNew);
4.然後再把旋轉點恢復到原點
g.TranslateTransform(-(float)(dH * dSin), 0);
5.這個時候得到一張全新的圖片tmp
6.旋轉後的圖片與原來的圖片座標出現偏差,選擇一個點,對旋轉後的影象進行平移
offX = -(float)(W-dW/2*dCos-dW/2);
offY = -(float)((dW / 2) * dSin);
7.找到一個點的位置,計算它距離原點的時時座標
destX = (int)((dH) * dSin+0.5*dW*dCos+ offX);
desY = (dH) * dCos+0.5*dW*dSin
8.對該點進行上面一樣的相應的平移
point.X= (int)((dH) * dSin + 0.5 * dW * dCos + offX );
point.Y = (int)((dH) * dCos+0.5*dW*dSin + offY);
9.如果想要往裡靠一靠就需要設定一個垂直偏移量offH
point.X= (int)((dH) * dSin + 0.5 * dW * dCos + offX - offH * dSin-0.5*destW);
point.Y = (int)((dH) * dCos+0.5*dW*dSin + offY - offH*dCos);
10.下一張圖尋找起始點的時候,需要將改圖旋轉後並且增加了平移量之後的圖 ,再次進行平移到繪圖點的位置進行繪畫
point.X= (int)((dH) * dSin + 0.5 * dW * dCos + offX - offH * dSin-0.5*destW);
dW
dH
W = (int)(dH * dSin + dW * dCos);
H = (int)(dW * dSin + dH * dCos);
2.找一個合適的旋轉點
g.TranslateTransform((float)(dH * dSin), 0);
3.然後進行旋轉角度,負數逆時針旋轉,正數順時針旋轉
g.RotateTransform(angleNew);
4.然後再把旋轉點恢復到原點
g.TranslateTransform(-(float)(dH * dSin), 0);
5.這個時候得到一張全新的圖片tmp
6.旋轉後的圖片與原來的圖片座標出現偏差,選擇一個點,對旋轉後的影象進行平移
offX = -(float)(W-dW/2*dCos-dW/2);
offY = -(float)((dW / 2) * dSin);
7.找到一個點的位置,計算它距離原點的時時座標
destX = (int)((dH) * dSin+0.5*dW*dCos+ offX);
desY = (dH) * dCos+0.5*dW*dSin
8.對該點進行上面一樣的相應的平移
point.X= (int)((dH) * dSin + 0.5 * dW * dCos + offX );
point.Y = (int)((dH) * dCos+0.5*dW*dSin + offY);
9.如果想要往裡靠一靠就需要設定一個垂直偏移量offH
point.X= (int)((dH) * dSin + 0.5 * dW * dCos + offX - offH * dSin-0.5*destW);
point.Y = (int)((dH) * dCos+0.5*dW*dSin + offY - offH*dCos);
10.下一張圖尋找起始點的時候,需要將改圖旋轉後並且增加了平移量之後的圖 ,再次進行平移到繪圖點的位置進行繪畫
point.X= (int)((dH) * dSin + 0.5 * dW * dCos + offX - offH * dSin-0.5*destW);
point.Y = (int)((dH) * dCos+0.5*dW*dSin + offY - offH*dCos);
看一下效果
ps:!!!!重要的事情說三遍!!!
(float)(1/ 3)-----------------這個答案永遠是0!!!!除錯了我一晚上 大爺的
offY = -((3.0 / 4.0) * dW * dSin + (1.0 / 3.0) * dH * dCos);