2016-03-19 7 views
1

In meinem C# -Programm verwende ich die RotateTransform-Methode, um das Bild zu drehen, das ich zeichnen möchte. Das funktioniert schon, aber ich kann nicht herausfinden, wie ich den Mittelpunkt von wo das Bild rotiert ändern könnte. Standardmäßig ist es die linke untere Ecke meiner Picturebox, leider muss ich um einen anderen Punkt um (760, 480) px drehen.C# RotateTransform - Probleme beim Ändern des Mittelpunkts

Ich habe überall gesucht und bin nur auf diese CenterX-Eigenschaft gestoßen.

Wie auch immer, ich scheint nicht diese Eigenschaft mit Visual Studio, zu finden, also denke ich, dass ich das falsch mache.

Meine aktuellen Code sieht wie folgt aus:

*e.Graphics.RotateTransform(angle); 
e.Graphics.DrawLine(Pens.Black, physicObj.lineStartingPoint, physicObj.lineEndingPoint); 
e.Graphics.FillEllipse(new SolidBrush(Color.Red), new Rectangle(physicObj.leftCornerCircle, physicObj.circleSize)); 
e.Graphics.FillRectangle(new SolidBrush(Color.Blue), new Rectangle(physicObj.leftCornerRectangle, physicObj.rectangleSize));* 

Dieses Teil funktioniert prima, aber verwendet einen falschen Punkt Zentrum, um sich zu drehen. Ich habe versucht,

e.Graphics.RotateTransform.CenterX = ... ; 

zu verwenden, aber es scheint keine CenterX zugänglich innerhalb e.Graphics.RotateTransform zu sein. Visual Studio zeigt unter RotateTransform eine rote Linie an, die besagt, dass es sich um eine Methode handelt, die im angegebenen Kontext nicht gültig ist. Ich weiß nicht, wie ich diese Eigenschaft einstellen soll und ich habe keine Coding-Beispiele gefunden, und basierend auf den Informationen, die Microsoft (im Link) gibt, dachte ich, dass dies der richtige Weg ist.

Hoffentlich kann jemand erklären, was ich tun muss, um diesen Mittelpunkt zu ändern. Vielen Dank!

+1

Mögliche Duplikat [Draw Linie in einem Winkel über Bitmap gedreht] (http://stackoverflow.com/questions/36015098/draw-line-rotated-at-an -angle-over-bitmap) Ein weiteres Beispiel [hier] (http://stackoverflow.com/questions/36035558/degre-rotation-on-triangle-without-with-change-position-using-c-sharp-windows-appl/ 36039553 # 36039553) - Verwenden Sie in der Sortierung den Graphics.TranslateTranform Beore und nach dem Drehen, dann zeichnen .. - 'CenterX' ist von Media, dh WPF; Ich nehme an, Sie tun WinForms – TaW

+0

Sie müssen auch einige Sprachgrundlagen lernen. Es macht keinen Sinn, eine Methode wie eine Eigenschaft zu behandeln. – usr

Antwort

4

Es ist ganz einfach:
1. zum Zentrum übersetzen
2. drehen
3. übersetzen zurück

float centerX = 760; 
float centerY = 480; 
e.Graphics.TranslateTransform(-centerX, -centerY); 
e.Graphics.RotateTransform(angle); 
e.Graphics.TranslateTransform(centerX, centerY); 

Im Wesentlichen erstellen Sie drei Matrizen und multiplizieren sie das Ergebnis zu erreichen - ein Single Transformation Matrix, die Grundlagen der 2D- und 3D-Transformation.


P.S. Sie können eine Erweiterungsmethode für Bequemlichkeit schaffen:

public static class GraphicsExtensions 
{ 
    public static void TranslateTransform(this Graphics g, float x, float y, float angle) 
    { 
    g.TranslateTransform(-x, -y); 
    g.RotateTransform(angle); 
    g.TranslateTransform(x, y); 
    } 
} 
Verwandte Themen