Laden...

Zeichenabstand beim Zeichnen mit Graphics Objekt erhöhen?

Erstellt von Rasta vor 13 Jahren Letzter Beitrag vor 13 Jahren 4.625 Views
R
Rasta Themenstarter:in
258 Beiträge seit 2007
vor 13 Jahren
Zeichenabstand beim Zeichnen mit Graphics Objekt erhöhen?

Hallo,

gibt es eine Möglichkeit bei Graphics.Drawstring den Zeichenabstand zu verändern?
Weder bei System.Drawing.Font noch bei DrawString hab ich eine Letter-Spacing Eigenschaft gefunden.

Muss ich das selbst coden? Und wenn ja: Wie berechne ich die Breite eines Buchstabens, damit ich diese Breite auf die X-Koordinate aufaddieren kann?

Gruß, Rasta

Sogar meine Mailadresse ist .NET 🙂

Gelöschter Account
vor 13 Jahren
  1. verwende nicht graphics.DrawString sondern immer den TextRenderer zum zeichnen von strings.

  2. verwende auch nciht graphics.MeasureString sondern immer TextRenderer.MeasureString

  3. wäre es bedeutend einfacher, wenn dueinfach ein leerzeichen zwischen jeden buchstaben setzt. wenn das zu viel ist, dann musst du mit measurestring ausmessen, wie groß der buchstabe ist und dann immer etwas dazuberechnen und immer nur ein buchstaben nach dem anderen zeichnen. VORSICHT!!!-->das funktioniert nicht mit allen fonts. bei inigen wird auch bei dieser verbesserten methode nicht immer die korrekte breite der einzelnen buchstaben berechnet.
    am besten du verwendest einen font, der immer für jedes zeichen den gleichen abstand hat. z.b. courier new.

49.485 Beiträge seit 2005
vor 13 Jahren

Hallo Rasta,

soweit ich das überblicke, kannst du bei DrawString zusätzlichen zu den Einstellungen im Font-Objekt nur das einstellen, was in StringFormat möglich ist. Ich sehe auch nicht, das mit Blick auf dein Anliegen mit TextRenderer mehr rauszuholen wäre.

herbivore

R
Rasta Themenstarter:in
258 Beiträge seit 2007
vor 13 Jahren

Das Problem ist, dass ich einen Parser + GUI für ein Layoutformat baue.
Sowohl Zeichenhöhe als auch Zeichenabstand wird in Gleitkomma-Millimetern angegeben. Einfach Leerzeichen dazwischenschieben ist viel zu ungenau.

Der TextRenderer scheint aber schon vielversprechend zu sein. Momentan zeichnet er mir noch alles zu klein, woran könnte das liegen? Ich übergebe dem TR das gleiche Font-Objekt wie Graphics.DrawString.
Interpretiert der TR die Angabe "2.34mm" etwa anders? 😉

Danke schonmal, wenns nicht richtig klappt frag ich nochmal.

@herbivore: Das hat mir Google leider auch gesagt. In .NET war ein vernünftiger Schriftsatz scheinbar nicht vorgesehen (bzw. bei DrawString etc.).

Möglicherweise muss ich wirklich aus jedem Wort ein Char-Array machen und jeden Buchstaben einzeln mit dem richtigen Abstand zeichnen. Schaun wa moal...

Gruß, Sascha

Sogar meine Mailadresse ist .NET 🙂

49.485 Beiträge seit 2005
vor 13 Jahren

Hallo Rasta,

Möglicherweise muss ich wirklich aus jedem Wort ein Char-Array machen und jeden Buchstaben einzeln mit dem richtigen Abstand zeichnen. Schaun wa moal...

das ist keine gute Idee. Du müsstest dich dann selber um die Abstände kümmern und die sind ja nicht konstant, sondern hängen von der Kombination der Buchstaben ab. Zwischen a und o (ao) sind es in diesem Font zwei Pixel und zwischen a und t (at) ein Pixel. Denkbar wären zwischen T und o (To) auch null Pixel oder sogar eine Unterschneidung, also ein negativer Abstand, obwohl das im konkreten Font nicht der Fall ist.

Je besser der Font ist, desto mehr sog. Hints hat er, was die Abstände von Buchstabenkombinationen angeht. Diese Hints werden bei der Ausgabe von fortlaufendem Text berücksichtigt. Wenn du die Zeichen einzeln ausgibst, können die Hints natürlich nicht zum Tagen kommen.

herbivore

4.939 Beiträge seit 2008
vor 13 Jahren

Hallo Rasta,

evtl. würde es sich für dich lohnen für einen Layout-Editor auf WPF umzusteigen.
Um derartige Zeichenoperationen auf Fonts umzusetzen, müßtest du mit Glyphen arbeiten (und WPF unterstützt dies, s.a. Typography in WPF).

R
Rasta Themenstarter:in
258 Beiträge seit 2007
vor 13 Jahren

An WPF hatte ich auch schonmal gedacht. Aber bevor ich das mache, liefere ich erstmal ab, was ich habe. Der GUI-Teil ist nämlich gar nicht gefordert gewesen, nur der Parser. Aber ich wollte halt ne visuelle Überprüfung haben ob der auch richtig parst ^^

Wo ich den Artikel "Typography in WPF" so lese...das ist ja richtig gut was da geboten wird. Da kommt anscheinend so ein "WinForms sind tot"-Gedanke hoch 😉

Danke dafür.

Gruß, Rasta

Sogar meine Mailadresse ist .NET 🙂