Laden...

Pixel Längen eines Buchstabens (aus nicht-installierter Fontdatei)

Erstellt von sth_Weird vor 9 Jahren Letzter Beitrag vor 9 Jahren 2.378 Views
S
sth_Weird Themenstarter:in
469 Beiträge seit 2007
vor 9 Jahren
Pixel Längen eines Buchstabens (aus nicht-installierter Fontdatei)

hallo,
ich möchte eine Schriftart laden (TTF, muss nicht installiert sein), deren unterstützte Zeichen ermitteln und dann die Breite jedes Zeichens in Pixel, abhängig von der Schriftgröße (auch in Pixel) ermitteln.
Die FontFamily lade ich mit dem System.Windows.Media Namespace, darüber komme ich auch an das GlyphTypeface und die CharacterMap. Leider sehe ich hier keine Möglichkeit, an eine Breite in Pixeln zu kommen. So ein Glyph hat zwar Properties wie AdvancedWidth etc (was sich schon genau nach dem anhört was ich brauche), aber da kommen immer Doubles zurück und ich habe bisher keine sinnvolle Umrechnung in Pixel gefunden, es kommen immer seltsame Werte raus die nicht passen. Ich kenne auch die Variante mit dem System.Windows.Forms und System.Drawing Namespace, da gibt es dann ja TextMetrics und (graphics-Objekt).MeasureText, aber hier wiederum habe ich keine Möglichkeit gefunden an die CharacterMap zu kommen (und graphics-Objket hab ich auch nicht, ich will den Text auch nicht zeichnen oder so ich will nur die geräteunabhängigen Pixel-Breiten eines Zeichens ausgeben)
Hat jemand nen Tipp wie man das am besten hinbekommt?
Beim googeln bin ich nicht weiter gekommen, dort wird immer entweder die CharacterMap gesucht ODER die Zeichenbreite.

Mir fiele nur ein die beiden Varianten zu kombinieren (also CharacterMap mit dem einen FontFamily Objekt bestimmen und dann die FontFamily nochmal im anderen Namespace laden und mit TextMetrics die Breiten berechnen), ich will aber noch nicht glauben dass es da nicht eine bessere Lösung gibt und hoffe deshalb auf Tipps.

gruß & thx
sth_Weird

++++++++++++++++++++~+
Fluchen ist die einzige Sprache, die jeder Programmierer perfekt beherrscht


Linux is for free...if your time is worth nothing
++++++++++++++++++++~+

49.485 Beiträge seit 2005
vor 9 Jahren

Hallo sth_Weird,

siehe MeasureString und Alternativen [Minimales einschließendes Rechteck der Schrift ermitteln].

Wozu brauchst du das?

Willst du später für einen (längeren) Text die Breiten der Buchstaben addieren, um die Bereite des Textes zu ermitteln? Das würde nämlich nicht so richtig klappen, denn es kommt nicht nur auf die Bereite der Buchstaben an, sondern auch auf die Abstände der Buchstaben untereinander. Die sind aber nicht fest, sondern hängen davon ab, welche Buchstaben hintereinander folgen (siehe z.B. Unterschneidung (Typografie) und Ligatur (Typografie)). Der Abstand von einem V zu einem A ist (bezogen auf die die Buchstaben umschließenden Rechtecke) z.B. in der Regel geringer als zu einem L.

herbivore

S
sth_Weird Themenstarter:in
469 Beiträge seit 2007
vor 9 Jahren

ich möchte theoretisch eine einfachere Variante dieses Tools nachprogrammieren (ich muss nur an die Pixel-Werte kommen, eine GUI dazu oder den c-Output brauche ich nicht (dafür aber andere Funktionen die das Tool nicht mitbringt, z.B. dass ich die Font aus einer Datei lade und diese NICHT installieren muss).
emWin Font Converter
oder (scheint fast so als wäre das der gleiche...)
emWin: Font Converter and Editor

gruß
sth_Weird

++++++++++++++++++++~+
Fluchen ist die einzige Sprache, die jeder Programmierer perfekt beherrscht


Linux is for free...if your time is worth nothing
++++++++++++++++++++~+

5.658 Beiträge seit 2006
vor 9 Jahren

Hi sth_Weird,

welche Pixelwerte? True Type ist ein Vektor-Format, da stehen keine Pixelangaben drin. Das TTF-Format ist gut beschrieben, vielleicht solltest du dir mal anschauen, welche Informationen da drin stehen und welche Informationen du davon brauchst.

Christian

Weeks of programming can save you hours of planning

S
sth_Weird Themenstarter:in
469 Beiträge seit 2007
vor 9 Jahren

ich meinte die Pixel-Werte die in der Anzeige unten rechts stehen... Width, X-Position, Y-Position, Cursor-Dist. etc...das ist ja alles in Pixel und die muss das Tool doch irgendwie auch berechnen können?
Nuja, guck mir jetzt mal das TTF Format an, vielleicht hilft mir das ja weiter...

++++++++++++++++++++~+
Fluchen ist die einzige Sprache, die jeder Programmierer perfekt beherrscht


Linux is for free...if your time is worth nothing
++++++++++++++++++++~+