Tatsächliche Koordinate nach Saletransfrom

Ich zeichne ein Rechteck in einer WinFroms-Anwendung in C# und ich möchte die tatsächlichen Koordinaten des Rechtecks ​​nach dem Anwenden von ScaleTransform erhalten.

Graphics g = e.Graphics;
g.ScaleTransform(2.0F,2.0F,System.Drawing.Drawing2D.MatrixOrder.Append);
g.DrawRectangle(pen, 20, 40, 100,100)
0

1 Antworten

Sobald Sie einen ScaleTransform in Ihrem Graphics -Objekt (oder einer beliebigen Transformation) festgelegt haben, können Sie damit die Punkte Ihres Rechtecks ​​(oder anderer Punkte) transformieren. .

Beispielsweise:

// your existing code
Graphics g = e.Graphics;
g.ScaleTransform(2.0F,2.0F,System.Drawing.Drawing2D.MatrixOrder.Append);

// say we have some rectangle ...
Rectangle rcRect = new Rectangle(20, 40, 100, 100);

// make an array of points
Point[] pPoints =
{
    new Point(rcRect.Left, rcRect.Top),     //top left
    new Point(rcRect.Right, rcRect.Top),    //top right
    new Point(rcRect.Left, rcRect.Bottom),  //bottom left
    new Point(rcRect.Right, rcRect.Bottom), //bottom right
};

// get a copy of the transformation matrix
using (Matrix mat = g.Transform)
{
   //use it to transform the points
    mat.TransformPoints(pPoints);
}

Beachten Sie die Verwendung von -Syntax oben - das liegt daran, wie MSDN sagt:

Weil die Matrix zurückgegeben wurde und die Eigenschaft Transform eine Kopie von ist   die geometrische Transformation, sollten Sie die Matrix entsorgen, wenn Sie nicht   länger brauchen es.

Als etwas weniger wortreiche Alternative können Sie dasselbe mit der TransformPoints -Methode der Graphics -Klasse ( MSDN hier ) - so konstruieren Sie Ihr Array von Punkten wie oben, dann tun Sie das einfach:

g.TransformPoints(CoordinateSpace.Page, CoordinateSpace.World, pPoints);

MSDN beschreibt die relevanten Koordinatenräume, die in der obigen Funktion verwendet werden:

GDI + verwendet drei Koordinatenräume: Welt, Seite und Gerät. Welt   Koordinaten sind die Koordinaten, die zum Modellieren einer bestimmten Grafik verwendet werden   Welt und sind die Koordinaten, die Sie Methoden in .NET übergeben   Rahmen. Seitenkoordinaten beziehen sich auf das Koordinatensystem von a   Zeichnungsoberfläche, wie ein Formular oder eine Kontrolle. Gerätekoordinaten sind   die Koordinaten, auf denen das physische Gerät gezeichnet wird, z   Bildschirm oder ein Drucker. Die Transform-Eigenschaft repräsentiert die Welt   Transformation, die Weltkoordinaten auf Seitenkoordinaten abbildet.

0
hinzugefügt
Vielen Dank Roger.Sie helfen mir sehr und jetzt funktioniert es! Ich wünschte, ich hätte genug Ruf, um Ihre Antwort zu wählen. :)
hinzugefügt der Autor evanchai, Quelle