2010-12-02 3 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도 회전합니다. 위쪽은 왼쪽 아래의 한 픽셀입니다. – tommy