LCD Image Converter:PNG 到嵌入式位图与字体,一条命令生成 C 代码
2026/8/22 9:25:14 网站建设 项目流程

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.cppimageflip.cpp
  • 字符位图还能交外部编辑器修改(imageeditinexternaltool.cpp

RLE 压缩

  • classes/compression/rlecompressor.cpp:8/16/24/32 位块,最大游程分别为 0x7f / 0x7fff / 0x7fffff / 0x7fffffff
  • 游程阈值minimumOfEquals默认 2rlecompressor.h):连续值达到阈值才压缩,调小省空间、调大避免数据膨胀

它是怎么工作的:从 PNG 到 C 数组

转换是一条四步流水线,每步都可替换:

  1. 入口分派--mode把命令行分成convert-imageconvert-fonthex2bin三个模式,工厂式创建,见classes/cmdline/cmdline.cpp
  2. 文档模型:图像进ImageDocument、字进FontDocumentclasses/data/),共用 DataContainer 存储,两种文档走同一条下游
  3. 像素采集ConverterHelper::pixelsDataclasses/parser/convert/converterhelper.cpp)先做单色抖动或灰度化,再让ConvImageScan按扫描顺序逐点取像素;采样顺序由运行在 QJSEngine 里的 JS 脚本决定——加一种扫描方向是加脚本,不是改核心
  4. 打包与输出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.cpptestbitstream.cpptestbitmaphelper.cpp
  • 仓库没有公布压缩率或性能基准,压缩收益取决于图像内容,别期待固定数字

三步上手:构建工具并转出第一张位图

  1. 克隆并构建(需要 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/
  1. 确定预设:跑一次 GUI,在设置对话框里位深、字节序、扫描方向选完保存成命名预设;图省事就直接用内置预设
  2. 转换--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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询