图片取模是指将图像数据转换为特定设备(如单片机、嵌入式显示屏)可直接解析的格式化数据的过程,其核心在于通过算法优化实现图像信息的高效存储与显示。

一、定义与核心原理

  1. 本质
    图片取模是通过像素级解析数据编码,将原始图像(如BMP/PNG/JPG/TIFF/GIF等格式)转换为设备可识别的点阵数据字模代码,例如将24位真彩色图像转换为16位RGB565格式。

  2. 技术目标

    • 资源适配​:压缩图像数据量以适应单片机有限的内存(如STM32的Flash空间)。
    • 显示兼容​:匹配屏幕分辨率(如128×64点阵)和颜色深度(如16位色)。
    • 硬件加速​:生成符合显示控制器(如ILI9341、ST7789)时序要求的二进制流

二、单片机多功能调试助手

1、界面分区与核心功能

根据图片信息,软件界面分为四大功能区域,各区域协同实现高效图片取模操作:

  1. 操作区

    • 功能入口​:提供图片路径输入(如C:\Users\wen\Desktop\image\happy.png)、打开转换按钮,支持单张图片批量处理。

    • 文件管理​:支持本地文件浏览(如PNG/JPG/BMP/GIF/TIFF格式),路径可切换为文件夹模式,便于批量操作。

  2. 参数配置区

    • 输出类型​:
      • 支持LVGL框架兼容的C代码生成(如图标、界面元素)。

      • 可选输出格式包括C代码(*.c),并支持透明度调色板配置(用于昼夜模式切换)。

    • 扫描模式​:
      • 水平扫描​:逐行生成点阵数据,默认方向为自右到左。
      • 垂直扫描​:支持自下到上扫描,适配不同显示控制器时序(如SPI屏幕)。
    • 画布参数​:
      • 固定输出尺寸为64×64(可扩展支持动态缩放),与原图(200×200)形成对比预览。

      • 颜色深度可选16位色(RGB565),优化内存占用(较24位色节省66%空间)。

    • 字节序配置​:小端/大端模式,适配ARM Cortex-M系列MCU内存访问特性。

  3. 原图显示区

    • 实时展示原始图片(如200×200的黄色笑脸PNG),支持缩放比例切换(真实尺寸/缩略图),便于用户核对取模区域。

  4. 输出预览区

    • 显示取模后的点阵图标(64×64像素),以黑白两色模拟实际显示效果,直观验证数据准确性。

2、核心技术特性

  1. 颜色处理引擎

    • RGB565转换算法​:将24位真彩色(如原图32bpp ARGB)压缩为16位色,通过R[5位]+G[6位]+B[5位]编码,保留人眼敏感色域。

    • 透明度处理​:支持Alpha通道提取,生成带调色板的索引色模式(如8位色+3位透明度),适配带透明度的UI元素。
  2. 扫描模式适配

    • 方向控制​:通过参数配置扫描顺序(如自右到左水平扫描),直接生成与硬件显示控制器匹配的点阵数据,避免软件翻转开销。
  3. LVGL兼容性

    • C代码生成​:输出符合LVGL8/9规范的lv_img_dsc_t结构体,包含头信息(宽度、高度、颜色格式)和二进制数据。

    • 动态适配​:兼容不同LVGL版本。

3、操作演示

以生成happy表情图标为例:

  1. 选择图片​:在操作区点击打开,加载happy.png
  2. 配置参数​:
    • 输出类型选择C代码,扫描模式设为水平自左到右
    • 设置输出尺寸为64×64,颜色深度RGB565,启用小端模式。
  3. 执行转换​:点击转换按钮,软件自动生成happy.c文件,包含点阵数据。
  4. 浏览代码:
  5. // 文件名: happy.png
    // 原始图像大小: 200 x 200
    // 自定义输出大小: 64 x 64
    // 色深: 16 bpp (RGB565)
    // 扫描方式:  水平扫描
    // 扫描方向: 水平 从左到右, 垂直 从上到下
    // 字节顺序: 小端模式
    // 作者: 温工
    
    const unsigned char g_image_happy_64x64[8192] = {
    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
    ........................................//省略
    };
  6. 验证效果​:在输出预览区检查64×64图标显示效果,确认与原图关键特征一致。

 三、习题

习题1:如何转换为LVGL专用C代码。

提示:在【输出类型】中选择LVGL8或LVGL9。

习题2:如何让图片横向显示。

提示:设置【扫描方式】为垂直扫描。

习题3:如果要批量转换图片,应该怎么操作,提高效率。

提示:选中单选项“文件夹”,正确设置好参数后,点击【批量转换】按钮。

习题4:正确选择了输出颜色深度,但是使用生成的C代码颜色存在差异。

提示:选择正确的字节序,特别是SPI屏发送16位色时,要注意字节序。

四、软件下载

下载地址:点击>>单片机多功能调试助手

Logo

openvela 操作系统专为 AIoT 领域量身定制,以轻量化、标准兼容、安全性和高度可扩展性为核心特点。openvela 以其卓越的技术优势,已成为众多物联网设备和 AI 硬件的技术首选,涵盖了智能手表、运动手环、智能音箱、耳机、智能家居设备以及机器人等多个领域。

更多推荐