Coordenada real después de scaletransfrom

Estoy dibujando un rectángulo en una aplicación WinFroms en C# y quiero obtener las coordenadas reales del rectángulo después de aplicar ScaleTransform .

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

1 Respuestas

Una vez que haya establecido un ScaleTransform en su objeto Graphics (o cualquier transformación para ese asunto), puede usarlo para transformar los puntos de su rectángulo (o cualquier otro punto) .

Por ejemplo:

// 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);
}

Tenga en cuenta la sintaxis utilizando anterior, esto se debe a que, como dice MSDN:

Porque la matriz devuelta y por la propiedad Transformar es una copia de   la transformación geométrica, debe deshacerse de la matriz cuando no   Ya lo necesito.

Como una alternativa ligeramente menos verídica, puede hacer lo mismo utilizando el método TransformPoints de la clase Graphics ( MSDN aquí ) - por lo tanto, construya su matriz de puntos como arriba, luego haga esto:

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

MSDN describe los espacios de coordenadas relevantes utilizados en la función anterior:

GDI + utiliza tres espacios de coordenadas: mundo, página y dispositivo. Mundo   coordenadas son las coordenadas utilizadas para modelar un gráfico particular   mundo y son las coordenadas que pasa a los métodos en .NET   Marco de referencia. Las coordenadas de la página se refieren al sistema de coordenadas utilizado por un   superficie de dibujo, como una forma o un control. Las coordenadas del dispositivo son   las coordenadas utilizadas por el dispositivo físico que se dibuja, como un   pantalla o una impresora. La propiedad Transform representa el mundo   transformación, que asigna las coordenadas del mundo a las coordenadas de la página.

0
agregado
Muchas gracias, Roger. ¡Me ayudas mucho y ahora funciona! Me gustaría tener suficiente reputación para votar tu respuesta. :)
agregado el autor evanchai, fuente