ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

Flipper Zero 中文显示实录:字体、文案、构建三处改动全解

Flipper Zero 中文显示实录:字体、文案、构建三处改动全解 Flipper Zero 中文显示实录字体、文案、构建三处改动全解【免费下载链接】flipperzero-firmwareFlipper Zero firmware source code项目地址: https://gitcode.com/GitHub_Trending/fl/flipperzero-firmware当你把中文写进 Flipper Zero 的测试应用屏幕上打出的是一排方格内置字体全是拉丁字符设置菜单里也没有语言选项。问题不在脚本而在字体这一层正是 Flipper Zero 中文显示绕不开的瓶颈。本文带你基于官方固件源码把字体、文案、构建三处改动一次跑通不依赖任何第三方魔改固件。原理速览症结在字体资源不在渲染接口先说结论渲染链路和 locale 服务各管一段而中文只卡在资源上。渲染链路所有界面文字经 u8g2轻量嵌入式图形库光栅化。applications/services/gui/canvas.c里canvas_set_font只挂了 4 套拉丁字体但同文件开放了canvas_set_custom_u8g2_font允许应用自带字体数组locale 服务applications/services/locale/locale.c只负责时间、日期格式和单位制式设置值存进 RTC不涉及语言切换指望改这里出中文走不通现状一句话UTF-8 绘制接口已经就绪缺的只是一份覆盖汉字字形的字体资源实施步骤改哪里、怎么改、改完看什么① 选定并裁剪 u8g2 中文字体做什么挑一份 u8g2 格式的中文字体裁剪成你真需要的那个字符集。关键操作u8g2 官方字体库自带文泉驿WQY系列的 6×6 中文字体可直接引入做第一版省掉转换环节想要更大字号或更小字集用 u8g2 附带的字体构建器u8g_fontbuilder从开源字体裁剪生成const uint8_t字体数组字集先按 GB2312 一级 3755 字控制规模字体数组声明为只读常量别让它吃掉宝贵的 RAM验证点生成的 C 文件里字体数组体积在你的预算内抽查几个常用字形非空。字能画出来之前先把资源备好下面写一个最小应用把字体挂上去。② 编写中文显示测试应用做什么参考官方示例applications/examples/example_custom_font/example_custom_font.c嵌入字体数组写一个输出中文的测试 FAP。关键操作canvas_set_custom_u8g2_font(canvas, u8g2_font_cn_6x6_t); // 换成你实际引入的字体数组名 canvas_draw_str(canvas, 0, 6, 中文显示测试);验证点设备上运行该应用中文显示测试六个字清晰可读不是方格或空白。字符渲染通了剩下的问题是文案系统级菜单和你自己应用的界面字符串都要换到中文一侧。③ 把界面文案接入中文资源做什么把应用界面字符串接到中文资源上全部走 UTF-8 路径渲染。关键操作字符串常量直接写 UTF-8 中文canvas_draw_str的调用方式不变它内部走u8g2_DrawUTF8别对中文做逐字节取字符、按 ASCII 估宽度的操作一个汉字在 UTF-8 里占 3 字节要算行宽就用u8g2_GetUTF8Width多行长文用canvas_draw_str_multiline并自己控制换行避免溢出屏幕被截断验证点中文菜单项完整显示行宽与 u8g2 返回值一致无重叠、无截断。文案就位后最后一步是让改动真正进设备这部分交给构建脚本。④ 用 fbt 编译烧录验证做什么在本地环境用 fbt 编译应用并烧录到设备。关键操作./fbt ./fbt flash_usb验证点构建完成且无字体符号未定义报错设备应用列表里出现测试应用运行后能看到 ② 的中文输出Flipper Zero 中文显示链路即打通。验证与排错编译通过不代表显示正确。烧录后运行测试应用屏幕应逐行输出中文再打开另一个使用同一字体的应用确认中英文混排不串位。验证 Flipper Zero 中文显示是否到位三种高频故障对照如下现象可能原因处理中文字符显示为方格或空白字体数组未包含该字形换用覆盖 GB2312 常用字的字体或把该字补进裁剪集中英文混排错位、重叠按 ASCII 单字节估算行宽用u8g2_GetUTF8Width计算宽度或中英文分行显示链接阶段报字体符号未定义字体 .c 文件没加进应用编译列表把字体源文件加入该应用的 SConscript 或源码列表延伸与参与applications/services/gui/canvas.c是最值得往下读的入口所有 UI 控件最终都从这里进入 u8g2。一个具体的贡献方向是为 NFC 应用的识别结果页补一张中文标签映射表把applications/main/nfc/里的标签类型名映射成中文扫描结果就能直接读懂。等你跑通这一套开头那排方格就会安静地变成一行干净的中文显示测试。【免费下载链接】flipperzero-firmwareFlipper Zero firmware source code项目地址: https://gitcode.com/GitHub_Trending/fl/flipperzero-firmware创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表