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...
'개발 및 운영 > 프로그래밍' 카테고리의 다른 글
프록시 환경 libwebsockets 에서 실제 클라이언트 IP 헤더 패치 (0) | 2015.07.31 |
---|---|
C로 DES 구현! (0) | 2015.07.31 |
C소스 - 소수구하기 (0) | 2015.07.31 |
AVR에서 I2C Detect (0) | 2015.07.31 |
WELL512 랜덤 알고리즘의 랜덤성? 확인&비교 (0) | 2015.07.31 |
댓글