2012-07-16 5 views
6

위키피디아의 메인 페이지의 위치와 문자열 중에서 xml을 구문 분석하는 구현이 있습니다. 구문 분석은 rapidxml로 수행 된 후 문자열이 http://utfcpp.sourceforge.net/에 의해 UTF-8에서 UTF-32로 변환됩니다. 그런 다음 UTF-32 코드는 freetype에서 사용됩니다.FreeType의 유니 코드 문제

unsigned long c = FT_Get_Char_Index(face,*p); 
FT_Load_Glyph(face,c,FT_LOAD_RENDER); 

여기서 * p는 UTF-32 char 코드입니다. 그러면이 글리프는 OpenGL에서 렌더링됩니다.

이제 cryllic 문자를 사용할 수 없으며 중국어 나 일본어 또는 중국어를 사용할 수없는 것 같습니다. * p가 올바른 코드와 일치하고 얻을 수있는 포인터가 있으면 감사 할 것입니다.

Arch linux package에서 Microsofts arial.ttf를 사용하고 fontviewing 프로그램에서 본 글꼴에서 원하는 문자를 포함해야합니다.

답변

7

두 가지 제안 :

먼저, 당신은 당신이 유니 코드 인코딩을 사용하고 지정 FT_Select_Charmap라고 있나요?

FT_Select_Charmap(face , ft_encoding_unicode); 

둘째, 모든 굴림없는 글꼴은 자동적으로 다른 얼굴에서 상형 문자를 대체하여 오도 할 수 있습니다 (Windows에서 어쨌든) 모든 문자, 일부 폰트 뷰어가 있습니다. 찾을 수있는 경우 ArialUni.ttf을 시도하십시오.

+1

의견을 보내 주셔서 감사합니다. FT_Select_Charmap을 사용하여 다른 결과를 얻지 못했습니다, 나는 그 유니 코드가 freetype의 기본값이라고 추측하고 있습니까? 추천 할만한 문자가 포함 된 글꼴이 있습니까? –

+1

Re. 글꼴, 나는 여기에서 시작할 것이다 : http://en.wikipedia.org/wiki/Unicode_typeface - 그리고 점검 할 다른 것은'FT_Get_Char_Index'를 호출하기 전에 중단 점에 도달하고 정확히 어떤 코드 포인트를 통과 하는지를 검사하는 것이다. 버그가 rapidxml 또는 utfcpp를 사용할 수 있습니다. – Roddy

+1

Freetype의 기본 인코딩은 사용중인 글꼴 및 다른 몇 가지 사항에 따라 다릅니다. 명시 적으로 인코딩을 지정하는 것이 좋습니다. – Roddy

1

얼굴을로드 한 직후 글꼴 크기를 설정하는 것을 잊지 마십시오.

FT_Error err = FT_Set_Pixel_Sizes(face, (width), (height));