Was ich mache, ist die Pixelgröße einer Zeichenkette zu erhalten und sie in hundertstel Zoll zu konvertieren (dh. Pixel/DPI = Zoll, Zoll * 100 = Hundertstel Zoll). Hier ist mein Code:Warum misst TextRenderer.MeasureText den Text nicht richtig, wenn in C# größere Schriftarten verwendet werden?
private static SizeF TextSize(string text, Font txtFnt)
{
SizeF txtSize = new SizeF();
// The size returned is 'Size(int width, int height)' where width and height
// are the dimensions of the string in pixels
Size s = System.Windows.Forms.TextRenderer.MeasureText(text, txtFnt);
// Value based on normal DPI settings of 96
txtSize.Width = (float)Math.Ceiling((float)s.Width/96f * 100f);
txtSize.Height = (float)Math.Ceiling((float)s.Height/96f * 100f);
return txtSize;
}
Nun Schriftart Arial mit dieser funktioniert alles in Ordnung für Schriften kleiner als 12, aber nach, dass Zeichen immer abgeschnitten gestartet werden, weil die berechnete Größe ist kleiner als die tatsächliche Größe. Ich weiß, dass meine DPI-Einstellungen auf 96 gesetzt sind meine Fonts alle gleich mit der Änderung in der Schriftgröße definiert sind:
Font myFont = new Font("Arial", <font size>, FontStyle.Regular, GraphicsUnit.Point);
Ich glaube, dass ich GraphicsUnit.Point
verwenden, weil die benutzerdefinierte Steuer ich die Saiten an Zeichnung zu, aber ist die GraphicsUnit
Angelegenheit?
Funktioniert die MeasureText
Funktion sogar richtig, oder läuft noch etwas anderes?
EDIT
I auf eine benutzerdefinierte Druckvorschau Kontrolle am Zeichnen. Die Einheiten im Druckvorschau-Steuerelement sind 'Zoll/100' (daher die Konvertierung). Ich glaube, dass der Text, die Bilder usw. mit dem Druckergrafikobjekt gezeichnet werden, aber ich bin mir nicht ganz sicher.
Ich habe als mit dieser Funktion Probleme hatte auch ich bin gespannt, was die Leute sagen. –