2010-12-09 5 views
1

Bis jetzt habe ich eine Textur (Bitmapfont) zum Font-Rendering verwendet, aber ich versuche Freetype2 zum Laufen zu bringen. Alle meine Strings sind SHIFT_JIS-kodiert und mein einziges Problem ist jetzt, von FreeType das richtige Glyph zu einer richtigen SHIFT_JIS Bitsequenz zu bekommen. Aber es scheint härter als ich erwartet hatte. Zum Beispiel "亜" hat den Zeichencode "0x889F" (Byte 1 ist auf 136 gesetzt und Byte 2 ist 159) - das entspricht der SHIFT_JIS-Codierung. Also rief ich die Funktion:Abrufen eines angegebenen Glyph aus Frei Schriftart (SHIFT JIS codiert)?

FT_Select_Charmap(face, FT_ENCODING_SJIS); 

und versuchen dann mit diesem charCode eine Glyphe zu laden:

FT_Load_Char(face, 0x889F, FT_LOAD_RENDER); 

Ich aber nehme einige zufällige Glyphe. Es kann kein schriftenspezifisches Problem sein, da ich bereits verschiedene Schriftarten mit dem gleichen Ergebnis probiert habe (und ja, sie bieten eine shift-jis-Charmap). Zu Beispiel "0" (Null) sollte an Position 0x0030 sein - aber es ist tatsächlich bei 0x002D. Nicht alle Zeichen haben einen konstanten Offset von 3, sonst gäbe es kein Problem ... Ich denke, mein "FT_Load_Char" -Aufruf übergibt den Charcode-Parameter falsch - aber ich kann nicht raten, wie es richtig wäre. Bereits versucht:

FT_Load_Char(face, FT_Get_Char_Index(face, 0x889F), FT_LOAD_RENDER); 

Aber dann erhalte ich eine andere zufällige Glyphe. Also, wie kann ich den Charcode an FT_Load_Char übergeben, wenn nicht die Standard-Charmap ausgewählt ist?

Jeder Rat wäre wirklich hilfreich. Vielen Dank.

Antwort

0

Wenn jemand das später mit einem ähnlichen Problem finden wird: Ich konvertierte die Zeichencodes im laufenden Betrieb zu Unicode (mit icu4c). Es scheint, als ob es ein Problem mit vielen japanischen SJIS-Font-Headern gibt (sie können nicht über die Freetype-Enums ausgewählt werden - nur wenn Sie alle verfügbaren Zeichensätze einer dieser Schriftarten auflisten und dann manuell die richtige auswählen) ID & Encodierungs-ID aren 't identisch für alle diese Schriften auch). Aber das war keine richtige Lösung für meine Bedürfnisse (weil verschiedene Schriftarten verwendet wurden), so entschied ich mich letztendlich für Icu4c.

Hoffentlich wird dies für jemanden hilfreich sein.

Verwandte Themen