2013-04-04 14 views
8

Ich benutze die GraphicsPath.AddString() Funktion, aber es zeichnet den Text mit ein wenig Platz um den Text. Irgendeine Idee, wie man die Zeichenkette ohne diese Polsterung zeichnet, nur die Pfade des Textes?Wie zeichne ich eine Zeichenkette ohne Padding

Mein Code ist wie folgt:

GraphicsPath gp = new GraphicsPath(); 

gp.AddString(text, font.FontFamily, (int)font.Style, font.Size, 
    boundsRectangle, format); 

g.DrawPath(pen, gp); 
+2

Was haben Sie im FormatFlags im Parameter StringFormat festgelegt? – plinth

+0

Dank Plinth für die Antwort ist der StringFromat _format = StringFormat.GenericDefault; Gibt es etwas, das das Problem in den Flaggen lösen kann? – MHMr

+0

http://stackoverflow.com/questions/118686/measurestring-pads-the-text-on-the-left-and-the-right –

Antwort

2

Was passiert ist, ist das unter der Haube ist es wahrscheinlich Graphics.MeasureString() verwendet, aus der Dokumentation:

GDI + eine kleine Menge hinzufügt (1/6 em) an jedem Ende jeder angezeigten Zeichenfolge. Diese 1/6 erlaubt> für Glyphen mit überhängenden Enden (wie kursiv 'f') und gibt GDI + auch eine kleine Menge an Spielraum, um bei der Gitteranpassung zu helfen.

Die Standardaktion von DrawString wird bei der Anzeige von benachbarten läuft gegen Sie arbeiten:

Zum einen die Standard-String eine zusätzliche 1/6 em jeder Ausgabe an jedem Ende addiert; Zweitens, wenn die Breite des Gitters nicht so groß ist wie vorgesehen, darf sich die Kette um zusammenziehen. Um diese Probleme zu vermeiden:

Pass immer MeasureString und DrawString ein StringFormat auf der Grundlage der typografischen> StringFormat (GenericTypographic). Legen Sie Graphics TextRenderingHint auf TextRenderingHintAntiAlias ​​fest. Diese Rendering-Methode verwendet Anti-Aliasing und Sub-Pixel-Glyph-Positionierung, um die Notwendigkeit einer Gitteranpassung zu vermeiden, und ist somit von Natur aus unabhängig von der Auflösung.

So sieht es aus wie Sie in der Lage sein sollten, dies mit dem richtigen StringFormat zu beheben.