Forum: PC-Programmierung Prüfen ob Zeichen in Font vorhanden ist


von Marius S. (lupin) Benutzerseite


Lesenswert?

Ich will mir für mein Display einen Font converter schreiben mit dem ich 
auch Unicode Grafik-Fonts erstellen kann.

Beim Konvertieren würde ich aber gerne prüfen ob das Zeichen, welches 
ich konvertieren möchte in der Ausgangsfont überhaupt vorhanden ist (um 
am Ende nicht eine Font zu erstellen die zum größten Teil aus 
Platzhalter-Kästchen besteht...).

Das ganze soll unter Windows laufen (also TrueType Fonts). Ein bischen 
habe ich schon in C# gespielt aber noch keine Möglichkeit gefunden die 
Existenz eines Zeichens zu überprüfen.

Nebenfrage: Kennt jemand vielleicht Unicode implementierungen auf 
Mikrocontrollern wo man mal abschauen kann?

von Reinhard Kern (Gast)


Lesenswert?

Hallo,

Zitat aus der TTF-File-Definition:

'cmap' Character to Glyph Index Mapping Table
...
Character codes that do not correspond to any glyph in the font should 
be mapped to glyph index 0. The glyph at this location must be a special 
glyph representing a missing character.

Falls dir das was nützt, müsstest du dir die True Type Definition 
besorgen, ich habe ein None Disclosure unterschrieben.

Gruss Reinhard

von Arc N. (arc)


Lesenswert?

Scheint die einzige Möglichkeit zu sein...
http://www.pinvoke.net/default.aspx/gdi32.getfontunicoderanges

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Seit wann ist ein NDA für die TrueType-Spezifikation erforderlich?

http://www.microsoft.com/typography/SpecificationsOverview.mspx

von Reinhard Kern (Gast)


Lesenswert?

Hallo,

danke für den Link - meine Spec ist Version 1.00, die gibts nicht mal 
mehr "for historical purposes". Damals war Truetype noch ganz neu und 
vertraulich. Aber wie man sieht stimmt das meiste noch.

Gruss Reinhard

von Μαtthias W. (matthias) Benutzerseite


Lesenswert?

Hi

nimm doch die Freetype zum rendern deiner Fonts. Da fällt die Info 
einfach so ab (Mapping des Codes auf glyph index 0)

Gibts da eigentlich nichts fertiges? Ist ja schließlich nicht weiter 
schwierig sich mit Freetype was zusammenzustricken.

Matthias

von Frank E. (Firma: Q3) (qualidat)


Lesenswert?

Ginge auch mit Mitteln des (pixelweisen) Bildvergleiches in deiner 
Windows-Anwendung. In einem Canvas oder internen Bildpuffer (z.B. 100 x 
100 Pix) gibst du einmal das Platzhalter-Kästchen aus, zum Anderen das 
zu prüfende Zeichen und checkst dann, ob die Pixelmuster gleich oder 
verschieden sind bzw. ob überhaup Pixel geschwärzt wurden ...

Ist zwar nicht sehr elegant, benötigt dafür keine Kenntnisse der Interna 
einer Font-Datei.

Frank

von skynet80 (Gast)


Lesenswert?

@Marius S: erst Mal eine Frage, sag mal wie schreibst du die Zeichen in 
deine Ausgangs-Fontdatei?Hast einen eigenen TTF-Compiler geschrieben? 
Der Aufbau von TTF Dateien ist nicht simple.

Ich habe was ähnliches gemacht, ich musste allerdings eine TTF Datei um 
einige Zeichen reduzieren, sprich aus der datei löschen, dafür habe ich 
das TTX Tool verwendet (macht XML aus eine TTF datei und zurück).Diese 
verkleinte Datei wird dann im Embedded UI verwendet.

Zu deinem Problem:

auf Sourceforge habe ich mal ein Beispiel gefunden, wie man die 
einzelnen Tabellen aus einer TTF Datei ausliest, so wie der Reinhard 
Kern geschrieben hat, ist jedem Unicodewert ein Name des Glyphen 
zugeordnet oder eben 0, wenn kein Glyph vorhanden ist. Diese Zuordnung 
findet in der "CMAP" Tabelle Statt, wobei es dort glaub ich eine für 
Windows und eine für MAC gibt - Apple und Microsoft haben Fonts zusammen 
entwickelt.

Dann sind jedem Glyph die eigentlichen Punkte zugeordnet(steht im Header 
der TTF Datei), durch die Dann der Linienzug verläuft.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.