文字的顯示依賴于字型字庫,大緻的字型字庫分為點陣字庫、筆畫字庫和輪廓字庫。
點陣字庫:缺點比較明顯,縮放存在鋸齒,渲染旋轉等操作相對複雜,且效果不理想,先大多用在嵌入式行業(基本抛棄),常見格式有bdf,pcf,fnt,hbf,hzf等。
筆畫字型:不讨論。
輪廓字型:即矢量字型,利用字型輪廓及填充實作字型顯示,優勢明顯,渲染縮放較容易,但效率相對低些(相對于嵌入式)
簡單來說,freetype為字型字庫提供了一套解決方案,支援文字字型渲染等操作,主要還是其為C語言編寫,跨平台,為很多不支援矢量字型格式的嵌入式系統提供使用嵌入式字型的可能,且效率不低。
基本流程為:
加載字型字庫檔案-> 查找待顯示的文字索引-> 渲染操作(若反走樣處理)->處理為位圖資料->顯示
freetype官網http://freetype.sourceforge.net/index2.html
下面為在XP下顯示中文字型的執行個體,在官方下載下傳源碼,在..\freetype-2.4.2\builds\win32\vc2008\下打開工程,編譯為連結庫,建立VS2008的MFC程式,加載freetype242.lib庫。
簡單考慮,直接在MFC中的draw函數中畫出一個中文漢字。便于顯示,使用GDI+畫出漢字,是以首先對GDI+進行初始化等操作(GDI+的相關知識不讨論,不清楚可以留言或索取GDI+文檔,網上也可以搜搜)
在view.h中添加頭檔案聲明
1 2 | |
在view.h中添加成員變量
1 2 3 | |
在view.cpp的構造函數中添加
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | |
在::OnDraw(CDC* pDC)中添加代碼
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | |
這裡便可以通過face->glyph->bitmap獲得字型“博”的位圖資料了,bitmap中存放了如位圖的寬高、色深,調色闆等資訊,便可以通過GDI+繪制該圖像了
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | |
這部分代碼不多解釋,隻是顯示位圖資料,這裡face->glyph->bitmap是沒有調色闆的1位位圖,源于使用FT_RENDER_MODE_MONO渲染模式
顯示預覽

1 |
1 | |
簡單的描述一下freetype的使用流程,更詳細的函數說明及流程請參閱“freetype2開發入門”, 網上有此文檔,感興趣可以看看。