2016-12-21 3 views
0

Ich versuche, eine mehrfarbige Zeichenfolge zu zeichnen.Wie man Zeichen in Zeichenkette mit TextRenderer korrekt misst?

Da es keine Standardmethoden gibt, um dies zu tun, versuche ich, die Zeichenkette Char mit Character TextRenderer.DrawText zu zeichnen, jedoch meldet es nicht korrekt erste Zeichenbreite, wenn ich versuche, die Zeichenfolge zu messen.

Um es char von Char zu zeichnen, Iteriere ich durch die Zeichenfolge, die vorherige Zeichenbreite misst, um die Position des nächsten Zeichens zu finden.

Breite zu erhalten, die ich benutze:

 TextRenderer.MeasureText(word.Substring(0, i), 
        drawFont, 
        new Size(int.MaxValue, int.MaxValue), 
        (TextFormatFlags.Left | TextFormatFlags.NoPadding)).Width 

, die normalerweise aber für das erste Zeichen arbeitet, die Ausgabe wie erzeugt:

 L OREMIPSUM 

Grundsätzlich, wenn es nur ein Zeichen ist - es misst es mit Polsterung trotz meiner Fahnen.

kann ich verwenden:

 TextRenderer.MeasureText(String.Concat("*", chr.ToString(), "*"), font).Width - TextRenderer.MeasureText("**", font).Width 

das erste Zeichen zu messen und zu korrigieren Breitenwert, aber es fühlt sich an wie ich etwas Hack tue, wenn es eine bessere Art und Weise zur Verfügung stehen sollten.

Ich kann String in der obigen Methode auch verwenden, um die Verwendung von TextRenderer.MeasureText zu vermeiden und trotzdem korrekte Ergebnisse ohne das erste Zeichenproblem zu erhalten.

Was wäre eine korrekte Art, Zeichen in meinem Fall zu messen?

Antwort

Verwandte Themen