Zeichenbreite ermitteln
-
Hi,
ich möchte die Breite eines Zeichens in Pixeln ermitteln.
Derzeit benutze ich DrawText mit DT_CALCRECT und das funktioniert soweit auch ganz gut, allerdings bekomme ich Probleme bei kursiven Schriften, da nicht die komplette breite die ein Zeichen braucht (blauer Kasten) sondern die Breite nach der das nächste Zeichen beginnen kann ermittelt wird (roter Kasten).Beispielbild (Stark vergrößertes i)
Wie kann ich rauskriegen wie viel Platz ein Zeichen wirklich einnimmt?
-
Dazu brauchst du die Funktion GetTextMetrics und die Struktur TEXTMETRIC.
Nach einem erfolgreichen Aufruf, wird die Struktur gefüllt und du kannst die Elemente
tmAveCharWidth und tmOverhang addieren und hast die Breite
.
-
Für einen ganzen String kannst Du auch
Graphics::MeasureString (GDI+)
verwenden.
-
Das ganze hat mit dem Kerning zu tun. Die entsprechenden Infos bekommst Du mit GetKerningPairs.
D.h. für jeweils ein Buchstabenpaar ist eine bestimmte Weite definiert.
-
PS: Kerning ist in der aktuellen c't etwas beschrieben bei dem "Fonts-selber basteln"...