Graphics.DrawString/GraphicsPath.AddString - Padding pro Zeichen?

Danielku15

Erfahrenes Mitglied
Hallo Leute.
Ich modifiziere meine Anwendung gerade so, dass ich komplexe Pfade (GraphicsPath) durch eine Schriftart mit den gewünschten Symbole ersetze.
In meiner Anwendung (welche Noten darstellt) müssen diese Symbole nun genau Positioniert werden. Wenn ich jedoch meine Zeichen an bspw. Position 0,0 zeichne, werden die Symbole nicht nicht an genau diese Position gestellt. Schwer zu beschreiben. Darum habe ich kurzer Hand eine kleine Grafik angefertigt. (Anhang).

Die linke Box resultiert aus folgendem Code:
C#:
            SizeF s = e.Graphics.MeasureString("C", DrawingResources.MusicFont);
            e.Graphics.DrawRectangle(Pens.Red, 0, 0, s.Width, s.Height);
            e.Graphics.DrawString("C", DrawingResources.MusicFont, Brushes.Black, 0, 0);

Seltsamerweise wird das Symbol innerhalb des em-Rechtecks (?) unten und zentriert dargestellt.
In meinem Font-Editor jedoch ist die Schrift ganz linksbündig dargestellt und auch in den Zeicheneinstellungen ist das linke Padding 0. ("Whitespace before Character: 0", "Left Side Bearing: 0")
Zum Test habe ich in Photoshop einen Rechteckigen Pfad erstellt und eine Textbox innerhalb dieser Box angeordnet. Dort wird der Text ganz linksbündig gerendert.
Und auch in Word (3. Box) wird bei Markierung des Textes ersichtlich dass das Zeichen ganz linksbündig ist.

Nur warum ist das so? Gibt es eine spezielle Einstellung welche festlegt dass pro Zeichen ein Padding angehängt wird? Da in der Anwendung auch ein Zoom-Faktor angegeben werden kann kann ich auch nicht einfach einen gewissen Betrag von den Koordinaten abziehen da ich keine ordentliche Berechnungsgrundlage für den Abstand habe. Auch bei anderen Schriftarten wird automatisch ein Padding eingefügt.

Hat einer eine Idee?

[EDIT]
Nach unzähligen Google-Suchen habe ich endlich die richtigen Suchbegriffe gefunden und auch einen entsprechenden Blog+MSDN Artikel gefunden:
http://weblogs.asp.net/israelio/arc...asureString-Offset-Problem-Solved-_2100_.aspx
http://support.microsoft.com/?id=307208

Bei der Verwendung von StringFormat.GenericTypographic für das Zeichnen wird das Zeichen schon mal linksbündig ausgerichtet. Der Abstand von oben resultiert in meinem Fall noch wegen des Fonts.

Grüße Daniel
 

Anhänge

  • Sample.png
    Sample.png
    6,7 KB · Aufrufe: 43
Zuletzt bearbeitet:
Zurück