2009-04-28 5 views
2

Ich benutze eine Funktion, um nach einem Stück Text zu rufen, der in einem Bereich gerendert werden soll. Die grundlegende Funktionsweise der Funktion ist:Graphics.MeasureString erlaubt zu viel Leerraum

Dim measureSize as Size 
Do 
    myFont = new Font(myFont.Name, myFont.Size - 1, FontStyle.Regular, GraphicsUnit.Document) 
    'Initial font size is set insanely high for the moment, during testing. 
    'Low initial font size is not the problem. 
    measureSize = g.MeasureString(myString, myFont) 
Loop until (measuredSize.width < desiredSize.width AND measuredSize.height < desiredSize.height) 

Das Problem dabei ist, dass MeasureString sehr viele Leerzeichen erweitert um die Zeichenkette, die es zieht, und die letzte Schrift wird viel zu klein gemacht wird.

Ich bin sicher, dass ich etwas Argument erinnere mich an eine mit, um Geige können alle die Polsterung aus dem MeasureString Methode zu entfernen, aber meine Suche drehen sich aktuell nichts auf.

Kann jemand MeasureString verwenden, um die GENAUE Größe der Zeichenkette ohne irgendeinen Rand zu messen?

Antwort

0

Sie sollten einen Versuch mit TextRenderer.MeasureText haben, da sie die Größe des Textes und nicht die Größe des Textes, wenn Anti-Aliasing zurückgibt.

MSDN Article

5

Pass StringFormat.GenericTypographic-MeasureString. Ich empfehle gegen TextRenderer, weil es Probleme mit Clear-Typ beim Rendern auf eine In-Memory-Bitmap hat. früher oder später

Mit TextRenderer- für die Messung und DrawString zum Zeichnen werden Sie zweifellos in eine Inkonsistenz bekommen.