Извлечение указанного глифа из freetype (кодировка SHIFT JIS)? - PullRequest
1 голос
/ 09 декабря 2010

До сих пор я использовал текстуру (bitmapfont) для рендеринга шрифтов, но я пытаюсь заставить работать freetype2. Все мои строки в кодировке SHIFT_JIS, и моя единственная проблема теперь состоит в том, чтобы получить от свободного типа правильный глиф до правильной битовой последовательности SHIFT_JIS. Но это кажется сложнее, чем я ожидал. Например, «亜» имеет код «0x889F» (байт 1 установлен на 136, а байт 2 на 159) - это соответствует кодировке SHIFT_JIS. Поэтому я назвал функцию:

FT_Select_Charmap(face, FT_ENCODING_SJIS);

и попробуйте загрузить глиф с этим кодом:

FT_Load_Char(face, 0x889F, FT_LOAD_RENDER ); 

Но я получаю некоторый случайный глиф. Это не может быть проблемой, связанной со шрифтом, потому что я пробовал уже разные шрифты с одинаковым результатом (и да, они предоставляют карту shift-jis). К примеру, «0» (ноль) должен быть в позиции 0x0030, но на самом деле это 0x002D. Не все символы имеют постоянное смещение 3, иначе проблем не было бы ... Я думаю, что мой вызов "FT_Load_Char" передает параметр charcode неверным образом - но не могу догадаться, как это будет правильно. Уже пробовал:

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

Но тогда я получаю еще один случайный глиф. Итак, как я могу передать код в FT_Load_Char, если не выбрана карта по умолчанию?

Любой совет был бы очень полезен. Спасибо.

1 Ответ

0 голосов
/ 17 декабря 2010

Если кто-нибудь найдет это позже с похожей проблемой: Я закончил с преобразованием кодов символов на лету в Unicode (используя icu4c). Кажется, что есть проблема со многими заголовками японских шрифтов SJIS (их нельзя выбрать с помощью перечислений freetype - только если вы перечислите все доступные наборы символов одного из этих шрифтов, а затем выберете правильный вручную - идентификатор платформы и кодировка не идентичны для всех этих шрифтов тоже). Но это не было правильным решением для моих нужд (потому что я использовал разные шрифты), поэтому я наконец решил использовать Icu4c.

Надеюсь, это кому-нибудь пригодится.

...