Abrufen eines bestimmten Glyphe von Freetype (SHIFT JIS codiert)?
Frage
Bis jetzt habe ich eine Textur (bitmapfont) für Schriftwiedergabe, aber ich versuche, freetype2 zum Laufen zu bringen. Alle meine Saiten sind SHIFT_JIS codiert und mein einziges Problem ist jetzt von Freetype die richtigen Glyphe zu einer richtigen SHIFT_JIS Bitsequenz zu bekommen. Aber es scheint schwieriger, als ich erwartet hatte. Beispiel „?“ hat die charCode „0x889F“ (Byte 1 wird auf 136 und das Byte 2 159) -, die zur Kodierung nach SHIFT_JIS wird.
: Also ich die Funktion aufgerufenFT_Select_Charmap(face, FT_ENCODING_SJIS);
und versuchen Sie dann eine Glyphe mit dem charCode zu laden:
FT_Load_Char(face, 0x889F, FT_LOAD_RENDER );
Aber ich erhalten einige zufällige Glyphe. Es kann nicht ein font-spezifisches Problem sein, weil ich schon verschiedene Schriftarten mit dem gleichen Ergebnis versucht (und ja, sie bieten einen shift-jis charmap). Zum Beispiel „0“ (Null) sollte in der Position seine 0x0030 - aber seine in der Tat bei 0x002D. Nicht alle Zeichen haben einen konstanten Versatz von 3, sonst wäre es kein Problem sein ... Ich glaube, mein „FT_Load_Char“ Anruf übergeben Sie den charCode Parameter in einer falschen Weise - aber kann nicht erraten, 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 die charCode zu FT_Load_Char passieren, wenn nicht der Standard charmap ausgewählt ist?
Jede mögliche Beratung sehr hilfreich sein. Danke.
Lösung
If anyone will find this later with a similiar problem: I ended up with converting the character codes on the fly to unicode (using icu4c). It seems like there`s a problem with a lot of japanese SJIS font headers (they can not selected via the freetype enums - only if you list all available charsets of one of these fonts and then choose the right manually - platform ID & encoding ID aren't identical for all of these fonts too). But that wasn't a proper solution for my needings (because using different fonts), so I finally decided to use Icu4c.
Hopefully this will be helpful to someone.