2010-12-02 8 views
0

私はクラスClass1:PanelでOnPaintメソッドを使用しています。四角形を回転させて描画するC#グラフィックスの奇妙な回転

protected override void OnPaint(PaintEventArgs e) 
{ 
    base.OnPaint(e); 
    Graphics g = e.Graphics; 
} 

私は

Matrix m = new Matrix(); 
m.RotateAt(90, rotationPoint); 
g.Transform = m; 
g.FillRectangle(Brushes.Black, rectangle) 

を使用しています問題は、私はそれがしたいように、回転が働いていないこと、です。

http://i52.tinypic.com/2rca2ic.png

赤の広場回転ポイントで、それは長方形の真ん中トップに位置しています。どのように回転が正しく動作するようにx、y、回転ポイントを設定するには?

90 degressで回転した後に、同じ位置のままである。この

i53.tinypic.com/2co25wj.png

赤色画素ようになります。

+1

だから、何* *それが回転した後のように見えるのでしょうか? –

+0

Marceloは言ったように...そしてあなたはどのようにrotationPointを設定していますか? –

+0

回転後、赤い点が四角形の外側にあります。私は回転点を新しいPointF(x-(rectangleWidth/2)、y)として設定しています。ここでxとyは赤色ピクセルの座標です – tommy

答えて

1

ローテーションポイントは、回転させたいポイントではありません。のグラフィックが回転しているのがポイント、です。したがって、グラフィックスの上部に四角形を描き、回転させたい場合(矩形)、回転ポイントをのグラフィックスの中心に設定し、のイメージを90度回転させる必要があります。ここ
は一例であり、あなたが望むものはほとんどないこと:

base.OnPaint(e); 

var g = e.Graphics; 
var width = g.VisibleClipBounds.Width; 
var height = g.VisibleClipBounds.Height; 
var rotationPoint = new PointF(width/2, height/2); ; 

// draw center point 
g.FillRectangle(Brushes.Red, new RectangleF(rotationPoint.X - 5, rotationPoint.Y - 5, 10, 10)); 

using (var path = new GraphicsPath()) 
{ 
    var rectangle = new RectangleF((width - 10)/2, 0, 10, 10); 
    var m = new Matrix(); 
    m.RotateAt(90, rotationPoint); 
    path.AddRectangle(rectangle); 
    path.Transform(m); 

    // draw rotated point 
    g.FillPath(Brushes.Black, path); 
} 
+0

私はあなたのソリューションを使いました。ここに私が達成したことの写真があります:http://i52.tinypic.com/2j47rrl.png下の長方形は0回転しています中心に描画され、上の中央が描画され、180回転します。上は左下の1ピクセルです。 – tommy