Faça + y para cima, mover Origem C # System.Drawing.Graphics
-
06-07-2019 - |
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.
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.