[C#] Text perfekt zentrieren

#2144263
Lesenswert?

Hi

Ich arbeite mich gerade in Managed DirectX mit c# ein. Da ich eine Zahl 
über ein VertexArray zeichnen lassen möchte, habe ich diese erst in ein 
Bitmap geschrieben und in eine Textur übertragen. Nur wie zentriere ich 
den Text perfekt? Irgendwie ist es immer ein bisschen nach unten rechts 
geschoben. Wahrscheinlich liegt das am TextRenderer? Was macht dieser 
falsch bzw. wie korrigiert man diese Ungenauigkeit?
1
//...
2
Size textsize = TextRenderer.MeasureText(str, font);
3
g.DrawString(str, font, new SolidBrush(forecoler), (textsize.Width + points) / 2, (textsize.Height + points) / 2);
4
//...

str ist der Text
font ist der Trommelwirbel Font
forecolor erklärt sich auch selbst
points ist die Größe der Bitmap, sowohl vertikal als auch horinzontal

Ich hab mal ein bisschen rumgespielt. Besser wird es wenn man bei x und 
y font.Size abzieht, aber eben nur ein bisschen, nicht ganz exakt.
#2144754
Lesenswert?

Samuel K. schrieb:
> Wahrscheinlich liegt das am TextRenderer? Was macht dieser
> falsch bzw. wie korrigiert man diese Ungenauigkeit?

Die Ungenauigkeit korrigierst Du, indem Du die Position, an der die 
Bitmap gerendert werden soll, richtig berechnest. Mal ein Beispiel:

textsize.Height = 5, points = 10, nach Deiner Berechnung wird die Bitmap 
bei 7,5 positioniert, was ja, wie Du geschrieben hast, zu tief ist (oder 
horizontal zu weit rechts).

Wenn Du aber ( Gesamthöhe - Texthöhe ) / 2 rechnest, kommst Du in meinem 
Beispiel auf 2,5, was richtig wäre.

Gruß
Markus
#2145249
Lesenswert?

Danke an alle. Der letzte Tipp war Gold wert.

So funktioniert es:
1
StringFormat sf = new StringFormat();
2
sf.Alignment = StringAlignment.Center;
3
sf.LineAlignment = StringAlignment.Center;
4
g.DrawString(i.ToString(), f, new SolidBrush(forecoler), new RectangleF(0, 0, points, points), sf);

Vor kurzem hab ich mir noch gedacht die DrawString Mehtode kann doch 
zentrieren, habe es damals aber nicht gefunden.

Markus Volz schrieb:
> textsize.Height = 5, points = 10, nach Deiner Berechnung wird die Bitmap
> bei 7,5 positioniert, was ja, wie Du geschrieben hast, zu tief ist (oder
> horizontal zu weit rechts).

Stimmt, das war der Fehler. Allerdings ist die obige Methode jetzt doch 
einfacher.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren