freetypeFont에 대해서 질문

프로그래밍 일반에 관한 포럼입니다.

Moderator: 류광

Locked
비회원

freetypeFont에 대해서 질문

Post by 비회원 »

freetype을 이용해서
폰트 찍기를 하고 있는데요

폰트에 옵션을 주고 싶은데.
freetype에서 지원하는게 무엇이 있는지 알고 싶습니다.

그러니까.

예를 들어
blod라는 옵션을 주려면
FT_GlyphSlot_Embolden
이 함수 호출하면 되더라구요

그에외

Italic, , OutLine, Shadow, UnderLine 등등
이 있는데.
Freetype에서 지원하는지 알고 싶습니다.

뭐 OutLine이나 Shadow같은건 편법(?)을 써서
OutLine은 8번
Shadow는 2번을 더 그려서
표현 할수 있긴한데.
좀 비효율적인것 같아서요

혹시 FreeType에서 지워되는게 있는지 알고 싶습니다

그리고 그 외에 FontOption 있으면 알려주세요.
비회원

Re: freetypeFont에 대해서 질문

Post by 비회원 »

혹시 FreeType에서 지워되는게 있는지 알고 싶습니다

그리고 그 외에 FontOption 있으면 알려주세요.[/quote]

Italic은 FT_Set_Transform이란 명령어를 이용하시면 되고요.

Shadow는 저도 기능은 못 찾았는데 두번 그리는 방법을 썼습니다. 대신 한 번 글리프를 Load해서 Bitmap을 얻어와서 Bitmap만 두번 그렸죠.

Underline은 디센더 위치 정도에 가로선 그려주셔야하고요,

Outline은 FT_Stroke라는 구조체가 있습니다. 굵기 지정이 가능하죠.
chadr
Posts: 980
Joined: 2003-06-01 12:28
Location: 모대학
Contact:

Post by chadr »

freetype은 원본으로 제공되는 폰트 파일을 기준으로 레스터라이징 해주는 라이브러리입니다.

또한 freetype은 여러가지 폰트 포맷을 지원합니다. 그중에서 많이 사용하는 true type 폰트를 지원하고 주로 이걸 사용합니다.

그리고 여러가지 변형 연산을 제공하는데 이탤릭과 같이 글자 자체를 변형시키는 트랜스폼 기능은 폰트에서 아웃라인 데이터가 있어야만 가능합니다.

그런데 문제점은 true type이라고 해도 모든 크기에서 아웃라인을 제공하지 않는 경우도 있다는 것입니다.

폰트제작자가 판단하여 어느정도 크기 아래에서는 아웃라인을 기준으로 직접 벡터 연산을 하는 것보다 비트맵을 직접 찍은걸 출력하는게 낫다고 생각되면 해당 크기에서는 아웃라인을 포함하지 않습니다.

이럴때 해당 크기에서는 트랜스폼이 안됩니다.

저같은 경우에는 그래서 레스터라이징이 끝낸 데이터를 직접 행렬연산을 통해 기울였습니다.

그림자 기능은 지원하지 않습니다. 그림자 기능은 직접 구현해주셔야합니다.

밑줄이나 취소선 같은건 폰트에서 지원하는 경우만 가능합니다. 무슨말이냐면 폰트 제작을 할때 폰트 제작자는 밑줄과 취소선에 대한 위치 정보를 같이 저장할수 있습니다. 이럴 경우에 freetype에서 이 정보를 기준으로 출력이 가능하며 만약에 폰트에 이 정보가 없으면 출력이 안됩니다.

따라서 모든 폰트에 대해서 적용하실려면 직접 그려주셔야합니다.

또한 아웃라인도 위에 이탤릭에서 말씀드린 폰트 자체의 아웃라인 정보가 있어야만 출력이 가능합니다. 없으면 출력이 안됩니다.

개인적으로 freetype의 스트로크 기능을 이용해서 출력을 해봤는데 별로 안이쁘더군요. 그래서 저는 그냥 직접 그려주었습니다.

freetype은 순수한 폰트 레스터라이징 엔진입니다.
거기에 몇가지 부가기능으로 변형이라든가 밑줄, 취소선 같은게 있긴 하지만 폰트 자체에서 지원해줘야만 출력이 가능합니다.

만약에 폰트에 그런 정보가 없으면 직접 그려줘야합니다.

http://www.dexgame.com/zbxe/?document_srl=9017#2

제가 구현했던 폰트 부분입니다. 참고하시면 될겁니다.
Locked