본문 바로가기
개발 및 운영/프로그래밍

FreeType 라이브러리의 출력 문제..ㅠㅠ

by Joseph.Lee 2015. 7. 31.

2015.05.06. 21:47



Alpha형식의 도트형(?) 폰트 제작기를 만드는데... freetype라이브러리에 예상치 못한 문제들이 많네요...ㅠㅠ


우선... freetype예제 소스를 보면 y좌표를 이렇게 계산합니다.

pen_y - face->glyph->bitmap_top + y

이렇게 되면... pen_y 를 baseline으로 잡고 출력을 합니다.


(그림출처 : http://cafe.naver.com/carroty/243850)

저는 pen_y을 상단왼쪽으로 잡고 출력을 하고 싶어서... (그래야 폰트 생성기를 만들죠~)

pen_y - face->glyph->bitmap_top + y + font_size 이렇게 바꾸었습니다.

하.지.만.

특정 글자들은 bitmap_top < char_height 인 경우가 있어서...

 

이런 경우가 있습니다.


 

이렇게..ㅠㅠ 보면 전체적으로 위로 올라가야 정상적으로 나올걸로 보입니다.

그런데... 그게 어느정도 올라가야 할까요??


당근 카페에서 람나라 님과 브레인 님에게 큰 도움을 얻었습니다.

1. http://www.gpgstudy.com/forum/viewtopic.php?p=96321

if (FT_IS_SCALABLE(face))

{

#define MY_FT_PIX_FLOOR( x )     ( (x) & ~63 )

#define MY_FT_PIX_ROUND( x )     MY_FT_PIX_FLOOR( (x) + 32 )

#define MY_FT_PIX_CEIL( x )      MY_FT_PIX_FLOOR( (x) + 63 )

ascender = MY_FT_PIX_CEIL(FT_MulFix(face->ascender, face->size->metrics.y_scale)) >> 6;

}else{

ascender = int(face->size->metrics.ascender * 1.0f / 64.0f);

}

baseLine = font_size - ascender;


2. http://stackoverflow.com/questions/24030488/freetype-2-character-exact-size-and-exact-position

baseLine = abs(face->descender) * font_size / face->units_per_EM;


output_y = font_size + pen_y + y - glyph->bitmap_top - baseLine;


여기를 참고해서... 코드를 수정하면..

잘 올라가긴 합니다..만..


윗쪽은 1번 링크로 계산한 것.

아랫쪽은 2번 링크로 계산한 것.



나눔펜글꼴같은 경우는 1번 방법을 사용하면 정상적으로 나오지만

2번 방법을 사용하면 비정상적으로 나오고...

나눔고딕ExtraBold같은 경우는 1번 방법을 사용하면 문제가 생기고

2번 방법을 사용해야 정상적으로 나옵니다...


참... 복잡하네요..

한번에 되는 방법은 없는지..ㅠㅠ



To be contined...

반응형

댓글