[C#] Zeichenbreite in Pixel

Danielku15

Erfahrenes Mitglied
Ja ich bins mal wieder.

Diesmal treibt mich meine Wissenslust in den Schriftartenbereich. Ich hab nun verschiedenste Möglichkeiten gefunden die angebliche Zeichenbreite eines Font Objekts zu ermitteln. (Ich benötige nur monospaced Fonts). Jedoch gibt mir keine der besagten Möglichkeiten die Zeichenbreite in Pixel zurück.
Hier ein Beispiel:
Ich habe folgendes Font-Objekt:
Font("Courier New", 9.75F, System.Drawing.FontStyle.Regular);

Wenn ich den Text unter der Lupe betrachte ist 1 Zeichen stolze 8x8px groß. Jedoch bekomme ich folgende Ergebnisse:
C#:
Graphics g = CreateGraphics();
System.Drawing.Font MonoSpacedFont = new Font("Courier New", 9.75F, System.Drawing.FontStyle.Regular);

MessageBox.Show(MonoSpacedFont.Height.ToString()); // 15
MessageBox.Show(MonoSpacedFont.GetHeight().ToString()); // 14,72656
MessageBox.Show(MonoSpacedFont.Size.ToString()); // 9,75
MessageBox.Show(MonoSpacedFont.SizeInPoints.ToString()); // 9,75
MessageBox.Show(g.MeasureString("A", MonoSpacedFont).Height.ToString()); // 16,35156
MessageBox.Show(g.MeasureString("A", MonoSpacedFont).Width.ToString()); //12,36947
MessageBox.Show(g.MeasureString("A", MonoSpacedFont).ToSize().Height.ToString()); // 16
MessageBox.Show(g.MeasureString("A", MonoSpacedFont).ToSize().Width.ToString()); // 12

Ich weiß einfach nicht woran es liegen könnte dass ich nicht die gewünschten 8px zurückgegeben werden.

gruß Daniel
 
Zuletzt bearbeitet:
Weil du dir nicht den MSDN-Eintrag zum Thema Graphics/MeasureString durchgelesen hast ...

Graphics besitzt eine Eigenschaft PageUnit der eine Maßeinheit übergeben werden kann, auf die MeasureString bei seiner Berechnung zurückgreift. Und zwar bekommt PageUnit den Wert aus der GraphicsUnit Enumeration, welche folgende Werte haben kann:
  • Display
  • Document
  • Inch
  • Millimeter
  • Pixel
  • Point
  • World
Genauere und weiterführende Informationen gibt es unter http://msdn2.microsoft.com/en-us/library/system.drawing.graphicsunit.aspx
 
Zurück