Pergunta

Eu quero que a origem de estar no centro da minha janela.

______________
|     ^      |
|     |      |
|     o----->|
|            |
|____________|

.NET quer que seja na esquerda canto superior.

_____________>
|            |
|            |
|            |
|            |
V____________|

Dot net e eu estamos tentando se dar bem ..

Alguém sabe como fazer isso em C # usando apenas o objeto Graphics?

Graphics.TranslateTransform não fazê-lo uma vez que deixa as coordenadas virado de cabeça para baixo. Combinando isso Graphics.ScaleTransform (1, -1) também não é satisfatória, uma vez que torna o texto aparecem de cabeça para baixo.

Foi útil?

Solução

Uma solução seria usar a propriedade TranslateTransform. Então, em vez de usar o Point / PointF structs você poderia criar um FlippedPoint / FlippedPointF estruturas de seu próprio que têm elencos implícitas a Point / PointF (mas lançando-lhes os coords se capotou):

public struct FlippedPoint
{
    public int X { get; set; }
    public int Y { get; set; }

    public FlippedPoint(int x, int y) : this()
    { X = x; Y = y; }

    public static implicit operator Point(FlippedPoint point)
    { return new Point(-point.X, -point.Y); }

    public static implicit operator FlippedPoint(Point point)
    { return new FlippedPoint(-point.X, -point.Y); }
}

Outras dicas

Você pode continuar usando ScaleTransform(1, -1) e redefinir a transformação atual temporariamente enquanto desenha o seu texto:

// Convert the text alignment point (x, y) to pixel coordinates
PointF[] pt = new PointF[] { new PointF(x, y) };
graphics.TransformPoints(CoordinateSpace.Device, CoordinateSpace.World, pt);

// Revert transformation to identity while drawing text
Matrix oldMatrix = graphics.Transform;
graphics.ResetTransform();

// Draw in pixel coordinates
graphics.DrawString(text, font, brush, pt[0]);

// Restore old transformation
graphics.Transform = oldMatrix;

Tente criar os gráficos objeto com uma altura negativo. Eu não sei a biblioteca C # especificamente, mas este truque funciona em versões recentes do GDI.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top