'FreeType2'에 해당되는 글 2건

  1. 2010.03.17 FreeType2 에서 ttf폰트 사용하기
  2. 2010.03.17 FreeType2 개요 번역

아래에서 퍼옴
http://includes.egloos.com/1482679

GDI 의 DrawText 같은 텍스트 출력 API 들은 우선 그 출력 품질이 좋지 못하고 특정크기 이하에서는 anti-aliasing 이 적용되지 않는다. (워드패드에서 12pt 크기의 글자와 40pt 글자의 품질을 비교해 보시라..) 무엇보다 DC 엑세스는 느리다!! 해서 어제는 난데없이 FreeType 라이브러리를 게임에 붙이는 작업을 했었다. 튜토리얼이 잘 되어 있에서 별 무리 없이 끝나긴 했지만 덕분에 알게 된 사실 한가지.

ttf 폰트는 저마다 인코딩 타입이 다르다. 완성형으로 되어 있는 폰트도 있고 유니코드로 되어 있는 폰트도 있다. 폰트쪽에 영 관심이 없다 보니 오늘 첨 알았다. -_-;;; 어쨌든 FreeType 은 glyph index(해당 글자의 인덱스) 를 넘겨주고 이미지를 넘겨받는 식인데 가장 해피한 경우는 "유니코드 ttf 폰트" 일 경우다. 이건 그냥 유니코드를 넘겨주면 글자 이미지가 튀어 나온다.

하지만 "완성형 ttf 폰트" 에서는 작업이 좀 골때리게 된다. 영문같은 경우에는 그냥 ASCII 코드를 넘겨주면 되지만 완성형 한글같은 경우 한글 2byte 한글자의 인덱스를 넘겨줘야 한다. 인덱스라 함은 완성형 한글 2 byte 를 하나의 숫자, 그것도 big-endian 으로 바꾼것을 의미한다. 간략하게 유니코드 한자에서 glyph index 를 얻어내는 코드를 살펴보자.

wcahr_t *szString = L"한글입니다~";

 for( size_t n = 0; n < len; ++n )
 {
    // 한글인경우
    if( szString[n] >= 0xAC00 && code_point <= 0xD743 )
    {
       // 우선 해당 유니코드 글자를 완성형으로 바꾼다.
       WideCharToMultiByte( 949, 0, &szString[n], 1, (LPSTR)&code, sizeof(code), "*", NULL );      // byte order 를 뒤집어 준다. -_-;
      code = htons( code );
     }
     glyph_index = FT_Get_Char_Index( face, code );
  }
예제 코드는 Win32 API 를 사용했지만 Unicode -> KSC-5601 변환 코드가 있다면 어느것을 써도 무방하다. 참고로 조합형 폰트가 없으리란 법은 없기에 face 의 인코딩 타입을 살펴보고 코드페이지를 적절히 바꿔 주어야 한다.

덧. FreeType 2.1.10 을 C++ 에서 사용시 LNK2001 : _otv_module_class 에러가 나는경우 해결책
제작자 아저씨는 아래와 같이 얘기하고 있다. -_-

the 'otvalid' module cannot be compiled as found in 2.1.10 because we're using legal C preprocessing tricks that are not supported by the Visual C++ compiler.

from http://www.mail-archive.com/freetype-devel@nongnu.org/msg00219.html


본인은 그래서 해당 모듈을 제거해 버리고 썼다. -_-;;;
===================
본인도 제거하고 썼다... -ㅡ..

음 ? 나두 제거하고 ? ㅋㅋ

'게임 개발' 카테고리의 다른 글

멀티코어 컴파일 옵션  (0) 2010.03.18
존카맥의 멀티코어 프로그래밍에 대한 의견  (0) 2010.03.18
FreeType2 개요 번역  (0) 2010.03.17
Scaleform GFx 분석  (0) 2010.03.17
은, 는, 이, 가 알아내기 44032  (0) 2010.03.17
Posted by 노을삼킨별
,

아래에서 퍼옴
http://includes.egloos.com/1482677



What is FreeType 2?

FreeType 2 는 작고 능률적이고 높은 수준의 커스텀이 가능하며 이식성이 높도록 - 양질의 출력을 가능하게 하면서 - 디자인된 software font engine이다. 이 것은 graphics librarys, display servers, font conversion tools, text image generation tools, 그리고 여러가지 다른 products에도 사용될 수 있다.

FreeType 2는 하나의 font service임에 유념하라. 이 것은 text layout이나 graphics processing 같은 고수준용의 API를 제공하지 않는다. 그러나 이것은 간단하고 이용하기 쉽게 정형화된 인터페이스를 제공함으로써 저런 작업들을 아주 간단하게 만든다.

FreeType 2는 두 가지의 open-source license에 의해 배포된다. 우리 고유의 FreeType LicenseGPL이 바로 그것이다. 이 것은 어떠한 프로젝트에도 이용될 수 있고, 소유될 수도 있다(?).

Features

다음 사항들은 FreeType 2가 제공하는 대략적인 특징들이다.

-FreeType 2는 file format에 구애받지 않고 정형화된 방식으로 font에 접근 할 수 있도록, 매우 간단하고 사용하기 쉬운 API를 제공한다. 부가적으로 font file의 특정 data에 접근할 수 있도록 개별 format용의 API를 사용할 수 있다.

-다른 비교 대상들과 다르게 FreeType 2는 TrueType이나 Type1 같은 scalable font formats를 지원한다. 그리고 그 fonts의 outline data 등을 client applications에 제공할 수도 있다.

-FreeType 2는 module을 기본으로 설계되었으나, compile 시에 정적으로 link시킬 수도 있다. 이 modules는 특정 폰트용으로 사용될 수도 있고, 새 glyph image formats용으로도 사용될 수 있다.

-FreeType 2 는 embedded system을 고려하여 쓰여졌다. 즉, static writable data는 사용되지 않는다. ( ROM으로 부터 직접 돌아갈 수있다.) client application이 그 자체의 memory manager와 i/o stream implementation을 제공해 줄 수 있다.

그 이야기는 다음을 가능하게 한다. 당신은 ROM기반, 압축된 혹은 원격의 font file들을 같은 API로 쉽게 읽을 수 있다. 여러 stream inplementations 는 하나의 FreeType 2 instance로 동시에 사용될 수 있다.

당신은 당신의 embedded project/enviroment에 필요한 module만을 compile함으로써 FreeType의 사이즈도 줄일 수 있다.

기본적으로 FreeType 2 는 아래와 같은 font format들을 지원한다.
- TrueType fonts ( and collections )
- Type 1 fonts
- CID-keyed Type 1 fonts
- CFF fonts
- OpenType fonts ( TrueType과 CFF의 변형들 )
- SFNT-based bitmap fonts
- X11 PCF fonts
- Windows FNT fonts
- BDF fonts ( anti-aliased 된 것들 포함 )
- PFR fonts
- Type42 fonts ( 제한된 지원 )

주어진 글꼴의 형태로 FreeType 2는 256단계의 "회색"을 이용해서 양질의 단색 bitmap 혹은 anti-aliased pixmap을 만들 수 있다. Windows 9x/98/NT/2000, FreeType 1 의 5단계 보다 훨씬 낫다.

FreeType 2 는 TrueType 과 OpenType에서 정의된 모든 character mapping들을 지원한다. 그리고 머리 아픈 "encoding translation" 문제로 몰아넣는 Type 1으로부터 Unicode charmap을 합성해낼 수도 있다. ( 물론 원한다면 original encoding을 사용할 수 있다. )

FreeType core API 는 glypn name이나 kerning data 같은 선진 정보(advanced data를 머라 해석해야 할지)에 접근할 수 있도록 간단한 함수들을 제공한다.

성능 좋고 모든 기능을 갖춘 TrueType bytecode interpreter를 제공한다. 이 engine은 작은 사이즈에서 멋진 출력을 만들 수 있다. 모하하고 혼동을 일으키는 TrueType specifications 때문에 이 요소를 제대로 만들기란 매우 어렵지만, 이제 우리는 Windows와 Mac의 질에 밀리지 않는다. ( 부디 interpreter를 사용하기 전에 이와 관련한 우리의 특허권 조항을 읽어주길)

TrueType bytecode interpreter이 필요없거나 혹은 사용하고 싶지 않은 사람들을 위해, 우리 고유의 hinter module을 만들었다. 이 것 역시 크기가 조정 가능한 font에 사용 될 수 있다.

FreeType 2는 비슷한 font engine들에선 주로 가능하지 않은 정보들을 제공한다. 이를 테면 kerning distances 나 glyph names, vertical metrics 등등..

module 디자인 덕택에 추가적인 format-specific 정보들을 optional API들이 제공할 수 있도록 library를 강화하는 건 쉽다. ( 예를 들면 어떤 optional API는 TrueType과 OpenType fonts의 SFNT table을 검색하는 기능을 제공한다. )

FreeType 2는 release 2.0.1부터 고유의 caching subsystem을 제동한다. 이 기능은 face instances나 glyph images를 저장하는데 효과적으로 사용될 수 있다.

Requirements

FreeType 2는 산업표준의 ANSI C로 작성되었고 다른 C compiler로 쉽게 compile 된다. 심지어 우리는 유명한 compliers에서 compile 할 때 (gcc나 Visual C++혹은 Boland C++) 모든 "warning"을 제거하기 위해 하기 위해 대단한 노력을 기울였다.

표준 ANSI C library와 별개로, FreeType 2 는 어떠한 추가적 의존성을 가지고 있지 않고, 어떠한 system에서도 독립적으로 complie되고 install 된다.

Patents issues

TrueType specification의 몇몇 부분들은 여러 Apple소유의 특허권으로 덮혀 있다. TrueType gliyph를 rendering하는 것은 Apple의 IP 권리 (license를 제외하고 : 뭐지?) 를 위반하지 않고선 일반적으로 불가능하다.

아래의 설명은 우리가 이 문제를 풀어낸 약간 특별한 방법에 관한 것이다.

- 먼저, FreeType의 기본 build는 TrueType glyphs rendering에 관한 특허 기술들을 전혀 사용하지 않을 것이다.
불행하게도, 이 자유는 font design과 주어진 font와 다른 glyph metrics에 따라 때때로 이상적인 질보다 낮은 glyph를 대가로 요구한다.

- 만약에 당신이 특허권이 인정되지 않은 나라에 살거나, 당신이 Apple로부터 license를 받았다면, 그리고 최상의 품질을 원한면, library를 컴파일하기 전에 간단한 설정 macro만 실행 시키면 된다. 만세!

이 주제에 관한 추가적 정보는 우리의 TrueType Patents page(http://freetype.sourceforge.net/patents.html)에서 찾을 수 있다. 당신이 Apple로부터 license를 획득하고 싶다면 그들의 Legal Department(mailto:iplaw@apple.com)로 연락하라. 우리는 그것이 가능한지, 얼마의 비용이 소요되는지등에 관해 어떠한 정보도 줄 수 없다.

Posted by 노을삼킨별
,