[問題] FreeType文字顯示
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
不限定平台(範例Code是windows平台,但這問題感覺上跟平台無關)
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
FreeType2 2.4.11
http://sourceforge.net/projects/freetype/files/freetype2/
問題(Question):
文字無法正常顯示,特定size會出現奇怪的亂碼
餵入的資料(Input):
windows8的細明體文字檔(mingliu.ttc),
unicode'王'
預期的正確結果(Expected Output):
解析出點陣圖資訊
總之就看起來是個王字...
World :王 , width :10 height : 9
0 0 0 0 0 0 0 01a 0
55348486e5848527d 1
0 0 0 05424 0 0 0 0
0 0 0 05424 0 0 0 0
03b4948846148963f 0
0 0 0 05424 0 0 0 0
0 0 0 05424 0 0 0 0
0 0 0 05424 0 0 5 0
354d4c4c725c4c4c8060
錯誤結果(Wrong Output):
錯誤的點陣圖,在特定字型大小時會出錯,如下
World :王 , width :12 height : 12
0807fc0 4 0 4 0 4 07fc0
4 0 4 0 4 0 4 0ffe0 0 0
fdfdfdfdabababababababab
eefeeefe 0 0 0 0 0 0 0 0
47a454 245f4 81810 1 9 1
d8 1 9 1 0 0 0 0 0 0 0 0
34 0 0 0 1 0 0 056 1 0 0
fdfdfdfdc8558d 28cf92b 1
73746962 0 0 c 0 0 0 0 0
0 0 0 0 a 0 0 0 c 0 0 0
c 0 0 0 2 0 0 030 1 9 1
0 0 1 0 0 0 0 0fdfdfdfd
程式碼(Code):(請善用置底文網頁, 記得排版)
http://ideone.com/4gEDvx
補充說明(Supplement):
字體要拷貝到專案下才能找到,要不然initial會過不了
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 125.224.246.214
→
03/30 01:17, , 1F
03/30 01:17, 1F
→
03/30 01:18, , 2F
03/30 01:18, 2F
是說應該是這樣嗎?
sprintf(tmp,"%2x",bitmap.buffer[i+ bitmap.pitch*j]);
這樣更慘烈,字形大小為12時, bitmap.pitch為2
※ 編輯: rephansu 來自: 125.224.246.214 (03/30 01:28)
→
03/30 07:27, , 3F
03/30 07:27, 3F
→
03/30 07:29, , 4F
03/30 07:29, 4F
→
03/30 13:11, , 5F
03/30 13:11, 5F
→
03/30 13:12, , 6F
03/30 13:12, 6F
→
03/30 13:13, , 7F
03/30 13:13, 7F
→
03/30 14:55, , 8F
03/30 14:55, 8F
字形有分 FT_GLYPH_FORMAT_BITMAP 和 FT_GLYPH_FORMAT_OUTLINE
FT_Load_Glyph第三個參數如果設成FT_LOAD_DEFAULT
讀取字形檔時會優先選擇Bitmap的字體
因此我的Code讀到FT_Glyph_To_Bitmap時會都沒有處理就跳出函式,
最後就變成讀出錯誤的文字。
耶!? 那Bitmap的字體不就要寫另外的流程
※ 編輯: rephansu 來自: 61.224.74.253 (03/30 15:03)
→
03/30 15:26, , 9F
03/30 15:26, 9F
→
03/30 15:26, , 10F
03/30 15:26, 10F
→
03/30 18:05, , 11F
03/30 18:05, 11F
推
03/30 21:36, , 12F
03/30 21:36, 12F
→
03/30 21:37, , 13F
03/30 21:37, 13F
→
03/30 21:38, , 14F
03/30 21:38, 14F
→
03/30 21:39, , 15F
03/30 21:39, 15F
→
03/30 21:40, , 16F
03/30 21:40, 16F
→
03/30 22:59, , 17F
03/30 22:59, 17F
→
03/30 23:01, , 18F
03/30 23:01, 18F