戰(zhàn)指南)
Flipper Zero中文字體顯示實(shí)戰(zhàn)指南【免費(fèi)下載鏈接】flipperzero-firmwareFlipper Zero firmware source code項(xiàng)目地址: https://gitcode.com/GitHub_Trending/fl/flipperzero-firmware你編譯 flipperzero-firmware 刷進(jìn)設(shè)備后期望在菜單里看到的中文變成了方塊。這不是屏幕問(wèn)題也不是 locale 設(shè)置問(wèn)題而是系統(tǒng)自帶的字體數(shù)據(jù)里根本沒(méi)有漢字字形你需要自己轉(zhuǎn)換一份 u8g2 中文字體喂給它。中文變方塊的根因缺字形數(shù)據(jù)不是引擎不支持文本渲染分兩層上層是 GUI 服務(wù) applications/services/gui/底層是 lib/u8g2/ 繪圖庫(kù)。lib/u8g2/u8g2.h 里已經(jīng)定義了U8G2_WITH_UNICODE繪制引擎能處理 Unicode 基本多文種平面缺的只是字體文件里的漢字。系統(tǒng)內(nèi)置的 helvB08、profont11 等全部是拉丁字體。canvas.c 的字體枚舉切換寫得很直白傳入不認(rèn)識(shí)的指針會(huì)直接崩潰} else if(font FontBigNumbers) { u8g2_SetFont(canvas-fb, u8g2_font_profont22_tn); } else { furi_crash(); }另外 locale 服務(wù) 只管計(jì)量單位、12/24 小時(shí)制、日期格式三項(xiàng)沒(méi)有任何語(yǔ)言維度。所以指望在設(shè)置菜單里加個(gè)中文選項(xiàng)解決顯示問(wèn)題方向就錯(cuò)了正確路徑是走字體。把中文字體推進(jìn)固件的做法把 TTF 轉(zhuǎn)成 u8g2 的 const 字體數(shù)組在 PC 上用 u8g2 官方 font converter 腳本把 TTF 轉(zhuǎn)成 .c/.h產(chǎn)物是const uint8_t數(shù)組數(shù)組直接進(jìn)應(yīng)用 flash繪制時(shí)原地取用不額外占用 RAM轉(zhuǎn)換時(shí)選位圖字體變體帶_tr、_ch之類的后綴128x64 的屏上位圖渲染更穩(wěn)定別拿全量字庫(kù)直接轉(zhuǎn)先做子集化再轉(zhuǎn)換順序反了白干用 canvas_set_custom_u8g2_font 把中文字體掛到 Canvas在繪制回調(diào)里調(diào)用canvas_set_custom_u8g2_font(canvas, 字體數(shù)組)即可切換完整流程見(jiàn) example_custom_font 示例切換只作用于當(dāng)前 Canvas其他界面和彈窗仍是默認(rèn)拉丁字體想讓整個(gè)應(yīng)用中文化就要逐屏切換千萬(wàn)不要把自定義字體指針塞進(jìn)Font枚舉傳給canvas_set_font會(huì)落進(jìn)furi_crash()分支const uint8_t u8g2_font_cjk_t_cn[] ...; // 轉(zhuǎn)換器輸出 canvas_set_custom_u8g2_font(canvas, u8g2_font_cjk_t_cn); canvas_draw_str(canvas, 0, 6, 這是中文);用 pyftsubset 把字庫(kù)壓到幾百 KB16px 下一個(gè)漢字約 32 字節(jié)3500 字就是 110KB 起應(yīng)用的 flash 預(yù)算很緊建議先用 fonttools 的pyftsubset子集化只保留你的應(yīng)用實(shí)際用到的菜單字、狀態(tài)詞、數(shù)字和符號(hào)轉(zhuǎn)換前先看一眼產(chǎn)物文件大小留足余量再進(jìn)固件后續(xù)要加新漢字時(shí)重新子集化并重新生成不要手改數(shù)組避坑與驗(yàn)證屏幕渲染全是豆腐塊 → 檢查字體文件字形覆蓋 → 確認(rèn)子集化的源 TTF 里真有這些字且編碼是 UTF-8啟動(dòng)即崩潰 → 檢查字體切換調(diào)用點(diǎn) → 換成canvas_set_custom_u8g2_font避開(kāi)枚舉的崩潰分支編譯提示 flash 溢出 → 看構(gòu)建日志里數(shù)組大小 → 減字?jǐn)?shù)或把字號(hào)降到 12px只有部分漢字缺失 → 檢查復(fù)制過(guò)程是否編碼損壞 → 確認(rèn)轉(zhuǎn)換器輸入輸出都是 UTF-8最簡(jiǎn)驗(yàn)證刷機(jī)后打開(kāi)你的測(cè)試界面中文一行完整、不重疊且構(gòu)建日志里 flash 占用沒(méi)逼近上限就算通過(guò)。延伸資源自定義字體示例加載自定義字體的標(biāo)準(zhǔn)寫法GUI Canvas 頭文件字體切換的入口u8g2 庫(kù)與字體聲明內(nèi)置字體清單和U8G2_WITH_UNICODE開(kāi)關(guān)locale 服務(wù)將來(lái)擴(kuò)展語(yǔ)言維度時(shí)的下手位置示例應(yīng)用目錄新建應(yīng)用時(shí)參考中文字體顯示的實(shí)質(zhì)就一句話引擎早支持了你只需供對(duì)字形數(shù)據(jù)并控制 flash 體積??梢詮?example_custom_font 的示例起步先在屏幕上畫出一行中文再談字庫(kù)范圍?!久赓M(fèi)下載鏈接】flipperzero-firmwareFlipper Zero firmware source code項(xiàng)目地址: https://gitcode.com/GitHub_Trending/fl/flipperzero-firmware創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考