DCGUI에 폰트렌더러를 탑재하기 위해서 freetype2를 이용해서 데이터가 어떻게 들어가 있고 이를 어떻게 렌더링을 하는지 테스트를 하고 있습니다..

freetype홈페이지의 튜토리얼을 보고 하고 있었는데..

대략 사용 방법은..

1.폰트로딩
2.폰트에서 렌더링 할 글자의 glyph인덱스를 구한다.
3.인덱스에 해당하는 glyph를 로드한다.
4.로드된 glyph를 안티엘리어싱, 모노크롬 등 옵션을 주어 렌더링을 한다.
5.렌더링 된 glyph를 자~알 사용한다.

이라고 써져있었습니다.

그래서 우선 위의 5번까지 하고.. 실제 화면에 출력을 해봤습니다.

폰트 크기 50픽셀(굴림체) :
사용자 삽입 이미지





보시는 바와 같이 아주 잘 렌더링 됩니다.


이제 좀 더 작은 크기를 렌더링 해봤습니다.

폰트크기 10픽셀(굴림체) :
사용자 삽입 이미지


안티엘리어싱이 먹어서 좀 안보이지만 확실히 정상적으로 렌더링이 되었습니다.


이제는 조금 더 큰 크기를 렌더링 해봤습니다.

폰트크기 12픽셀(굴림체) :
사용자 삽입 이미지




12픽셀부터는 깨지기 시작했습니다 .ㄱ-

그래서 이곳저곳을 검색해보니 트루타입 폰트중에 일부는 특정 글자크기에서 비트맵으로 데이터가 반환 된다고 하더군요..

만약에 비트맵으로 렌더링이 된다면 pixel_mode에 FT_PIXEL_MODE_MONO으로 온다고 하더군요.. 그래서 바로 확인해보니 FT_PIXEL_MODE_MONO가 오는게 맞았습니다.

그런데 모노크롬에서는 이미지가 비트로 표현이 되기 때문에 제대로 렌더링을 할려면 비트로 저장된 모든 이미지 정보를 풀어내야 했습니다.
그래서 열심히 풀어냈건만...

결과는 ㄱ-..

사용자 삽입 이미지


엉엉엉 ㅠㅠ

뭔가 빠진게 분명했습니다..

그래서 생각을 해보니.. 비트맵이 정사각형이나 정확히 8의 배수로 저장 된다는 법이 없으므로 제대로 풀어낼려면 실제 비트맵 열의 맨 마지막 행 바이트의 비트 패딩 개수를 알아내야 했습니다.

그런데 분명 튜토리얼에는 그딴건 안보였는데 ㄱ-
예제에도 그런건 없었는데 ㄱ-

튜토리얼 만든분 미어.. 엉엉 ㅠㅠ

이곳저곳 검색을 해보니 glyph 정보에 pitch라는 필드가 있더군요..
이 필드가 비트맵의 한 행이 가지는 실제 바이트수를 나타내는 것이었습니다..

분명 튜토리얼에는 없었는데.. 캐소심한 A형 성격 나온다...

그래서 이 값을 이용해서 다음 행의 오프셋을 구해서 다시 코드를 작성했습니다.

그리고 다시 렌더링을 했습니다.

폰트크기 12픽셀(굴림체) :
사용자 삽입 이미지



이제 잘 나오는군요..
힘들군요 ㄱ-
크리에이티브 커먼즈 라이센스
Creative Commons License
이올린에 북마크하기(0) 이올린에 추천하기(0)
2007/06/02 22:06 2007/06/02 22:06

트랙백 주소 :: http://dcple.com/blog/trackback/247

댓글을 달아 주세요

  1. 오.. DCGUI는 UI엔진인가요?

[로그인][오픈아이디란?]