LCD Image Converter:PNG 到嵌入式位图与字体,一条命令生成 C 代码
【免费下载链接】lcd-image-converterTool to create bitmaps and fonts for embedded applications, v.2项目地址: https://gitcode.com/gh_mirrors/lc/lcd-image-converter
给 128×64 单色屏换图标,嵌入式工程师得把 PNG 一个像素一个像素抠成 0/1 数组,再核对字节序、扫描方向、位深,错一处屏上就是乱码。LCD Image Converter 是嵌入式位图与字体转换工具:输入一张图或一组字符,按预设格式直接生成可编译的 C 数组或二进制数据。
一句话定位
面向嵌入式显示开发的 Qt 转换工具:输入图片或字符列表,输出能直接编进固件的 C 源码或二进制数据。
- 要把图像上屏、又不想手写像素数组的嵌入式工程师
- 控制器型号多、需要统一显示资源格式的项目维护者
- 希望把图标、字体生成放进 CI 的团队
能力全景:它覆盖哪些转换能力
输出可直接用
- 产出是可编译的 C 代码或二进制数据,两种格式任选(readme 的 Output format 一节)
- 输出格式由模板与预设驱动:内置模板以 Qt 资源形式存在,路径
:/templates/image_convert,见classes/settings/presets/templateoptions.cpp;命令行可用--template换成自己的模板 - 预设按名字从配置引用,如
--preset-name=lcdR4G5B4(代码注释中的示例名)
适配各类显示控制器
- 每像素 1~32 位(readme Features 一节)
- 8/16/24/32 位数据块:
classes/parser/convert/conversion_options.h中的DataBlockSize - 大小端可选:同文件的
BytesOrder - 扫描方向:上到下、下到上、左到右、右到左四个主方向 × 正反向,共 16 个内置 JS 脚本(含分条带变体),在
resources/scan_scripts/ - 单色图支持边缘阈值与扩散/有序/阈值抖动(
MonochromeType枚举)
字体生成:只生成你要的字符
- 按字符列表或码位范围生成:
--chars-list、--chars-range(如 "32-255")加--chars-encoding,见classes/cmdline/modeconvertfont.cpp - 默认字符集就是
0123456789ABCDEFabcdef,十六进制显示的常见需求开箱即有 - 等宽、抗锯齿、前景/背景色、字宽字高倍数(
--multiplicity-width/height)均可命令行指定 - GUI 提供Unicode 区块选择:
controls/fonts/font-new/unicodeblocksmodel.cpp,区块数据来自resources/unicode_blocks.txt
转换前先修图
- 旋转、翻转、平移、灰度、反色各是独立模块:
classes/operations/imagerotate.cpp、imageflip.cpp等 - 字符位图还能交外部编辑器修改(
imageeditinexternaltool.cpp)
RLE 压缩
classes/compression/rlecompressor.cpp:8/16/24/32 位块,最大游程分别为 0x7f / 0x7fff / 0x7fffff / 0x7fffffff- 游程阈值
minimumOfEquals默认 2(rlecompressor.h):连续值达到阈值才压缩,调小省空间、调大避免数据膨胀
它是怎么工作的:从 PNG 到 C 数组
转换是一条四步流水线,每步都可替换:
- 入口分派:
--mode把命令行分成convert-image、convert-font、hex2bin三个模式,工厂式创建,见classes/cmdline/cmdline.cpp - 文档模型:图像进
ImageDocument、字进FontDocument(classes/data/),共用 DataContainer 存储,两种文档走同一条下游 - 像素采集:
ConverterHelper::pixelsData(classes/parser/convert/converterhelper.cpp)先做单色抖动或灰度化,再让ConvImageScan按扫描顺序逐点取像素;采样顺序由运行在 QJSEngine 里的 JS 脚本决定——加一种扫描方向是加脚本,不是改核心 - 打包与输出:
Bitstream/BitmapHelper按预设的位深、字节序把像素打进位流,可选 RLE 压缩,最后由模板标签替换(classes/parser/tagslist.cpp)写出 C 源码
设计要点:转换核心固定,差异下沉到脚本与模板。控制器差异(扫描方向、字节序、数据块大小)全部参数化,不用为每块屏写新转换器。
产出与集成:构建后就能进 CI
产出是.c文件(或二进制),直接进工程编译。预设建议在 GUI 里配好(controls/setup/下的选项卡组:图像、字体、矩阵、预处理、重排序、模板),命令行再用--config-presets指向同一份预设文件,保证两处行为一致。
# CI 示例:先构建工具,再循环批量转换(CLI 一次收一个文件,用 shell 循环) convert-resources: stage: build script: - git clone https://gitcode.com/gh_mirrors/lc/lcd-image-converter - cd lcd-image-converter && qmake && make - for f in assets/*.png; do name=$(basename "$f" .png) ./linux/output/lcd-image-converter --mode=convert-image \ --input="$f" --doc-name="$name" \ --preset-name=lcdR4G5B4 --output=src/${name}.c done字体同理,把--mode换成convert-font,加上--family、--size、--chars-list即可。
数字说话:哪些数字是仓库里能查到的
| 项目 | 手写方式 | LCD Image Converter |
|---|---|---|
| 像素数组 | 手算位、字节序易错 | 预设驱动,1~32 bpp、8/16/24/32 位数据块全覆盖 |
| 控制器适配 | 每个型号写一套转换脚本 | 一个预设加模板,不改代码 |
| 字体数据 | 0-255 每个字符都画 | 按字符列表收录,默认 16 个十六进制字符 |
| 扫描方向 | 每种方向重新实现 | 16 个内置 JS 脚本,含分条带变体 |
| 压缩 | 手写 RLE | 内置,游程阈值默认 2 可调 |
| 换输出格式 | 推倒重写 | 换模板,文本 C 代码或二进制 |
仓库可查证的硬数字:
- 构建要求Qt ≥ 5.5,
.pro文件里有版本守卫,低版本直接报错 - RLE 各数据块的最大游程:0x7f / 0x7fff / 0x7fffff / 0x7fffffff
- 测试覆盖转换核心:
tests/parts/testrle.cpp、testbitstream.cpp、testbitmaphelper.cpp - 仓库没有公布压缩率或性能基准,压缩收益取决于图像内容,别期待固定数字
三步上手:构建工具并转出第一张位图
- 克隆并构建(需要 Qt 5.5+ 开发环境,模块 xml、network、svg、qml、widgets):
git clone https://gitcode.com/gh_mirrors/lc/lcd-image-converter cd lcd-image-converter && qmake && make # Linux 下二进制在 linux/output/- 确定预设:跑一次 GUI,在设置对话框里位深、字节序、扫描方向选完保存成命名预设;图省事就直接用内置预设
- 转换:
--input=icon.png --doc-name=icon --preset-name=你的预设名 --output=icon.c,打开icon.c确认是可直接编译的数组,收工
边界与取舍:什么情况下别选它
- 一次只吃一个输入:
--input是单路径,没有通配符,批量靠 shell 循环 - 预设在配置文件里,不在命令行里:
lcdR4G5B4这类名字来自应用设置,CI 与开发机要对齐行为,得靠--config-presets分发配置 - 不是轻量 CLI:构建依赖 Qt 5.5+ 和多个模块,它是"支持命令行的 Qt 应用",拿不到独立静态小可执行文件
- 自定义像素变换(Custom 类型)与扫描方向是 JS 脚本,脚本接口不看文档就是黑盒
- 色彩处理管线很短:只有单色/灰度/彩色/自定义四类,不做调色板缩减、量化、调色,输入图像要自己先备妥
- GPL v3(license 文件):属开发期工具、不链入设备运行时,但进闭源商用流水线前建议过一遍条款
回到开头那个 128×64 图标:抠像素、对字节序,原来一下午,现在一条命令,C 代码直接可编译。显示资源常变的项目,它值得进构建机。
【免费下载链接】lcd-image-converterTool to create bitmaps and fonts for embedded applications, v.2项目地址: https://gitcode.com/gh_mirrors/lc/lcd-image-converter
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考