LCD Image Converter:PNG 到嵌入式位图与字体,一条命令生成 C 代码
LCD Image ConverterPNG 到嵌入式位图与字体一条命令生成 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-namelcdR4G5B4代码注释中的示例名适配各类显示控制器每像素 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.cppRLE 压缩classes/compression/rlecompressor.cpp8/16/24/32 位块最大游程分别为 0x7f / 0x7fff / 0x7fffff / 0x7fffffff游程阈值minimumOfEquals默认 2rlecompressor.h连续值达到阈值才压缩调小省空间、调大避免数据膨胀它是怎么工作的从 PNG 到 C 数组转换是一条四步流水线每步都可替换入口分派--mode把命令行分成convert-image、convert-font、hex2bin三个模式工厂式创建见classes/cmdline/cmdline.cpp文档模型图像进ImageDocument、字进FontDocumentclasses/data/共用 DataContainer 存储两种文档走同一条下游像素采集ConverterHelper::pixelsDataclasses/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 --modeconvert-image \ --input$f --doc-name$name \ --preset-namelcdR4G5B4 --outputsrc/${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、widgetsgit clone https://gitcode.com/gh_mirrors/lc/lcd-image-converter cd lcd-image-converter qmake make # Linux 下二进制在 linux/output/确定预设跑一次 GUI在设置对话框里位深、字节序、扫描方向选完保存成命名预设图省事就直接用内置预设转换--inputicon.png --doc-nameicon --preset-name你的预设名 --outputicon.c打开icon.c确认是可直接编译的数组收工边界与取舍什么情况下别选它一次只吃一个输入--input是单路径没有通配符批量靠 shell 循环预设在配置文件里不在命令行里lcdR4G5B4这类名字来自应用设置CI 与开发机要对齐行为得靠--config-presets分发配置不是轻量 CLI构建依赖 Qt 5.5 和多个模块它是支持命令行的 Qt 应用拿不到独立静态小可执行文件自定义像素变换Custom 类型与扫描方向是 JS 脚本脚本接口不看文档就是黑盒色彩处理管线很短只有单色/灰度/彩色/自定义四类不做调色板缩减、量化、调色输入图像要自己先备妥GPL v3license 文件属开发期工具、不链入设备运行时但进闭源商用流水线前建议过一遍条款回到开头那个 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),仅供参考