在物联网(IoT)设备编程中,经常需要将图像文件转换成可供代码使用的像素数据。这些设备通常无法直接处理JPG或PNG等格式的图像资源。img2cpp工具可以帮助将图像文件转换成C++代码中的像素数据,以便在IoT设备或其他没有资源分支的平台上使用。
img2cpp工具包含两个可执行文件:img2cpp和img2cppw。img2cpp是一个命令行工具,而img2cppw是一个基于图形用户界面(GUI)的工具。两者的功能相同,但使用方式略有不同。以下是img2cpp命令行工具的使用说明,它同样适用于img2cppw:
Usage: img2cpp.exe [/name ] [/jpg|/16bpp]
[/gfx14|/gfx17] [/be]
[/resize [][x]]
[/arduino] [/out: ]
The image to convert
The base name to use in the header
Embed as JPG image
<16bpp> Convert to 16bpp
Use gfx14 or 17 bindings
Use big-endian format
Resize the image. If one dimension
isn't specified, the aspect ratio
is preserved.
Create code for Arduino
The output header to generate
其中,
以下是img2cpp工具支持的参数及其说明:
生成的头文件包含在项目中后,如何使用取决于生成的代码类型。以下是一些示例代码片段,假设上述的
// 原始像素数据:
const uint8_t* px0ptr = my_image;
// 位图的大小
uint16_t width = my_image_size.width;
uint16_t height = my_image_size.height;
请注意,这里没有包含绘图代码。需要在代码中自行渲染或以其他方式使用像素数据。
// 原始像素数据(不需要):
const uint8_t* px0ptr = my_image_data;
// 位图的大小(不需要)
uint16_t width = my_image_size.width;
uint16_t height = my_image_size.height;
// 位图(使用这个)
my_image_t bmp = my_image;
// 使用htcw_gfx,可以像这样绘制my_image到lcd上:
draw::bitmap(lcd, lcd.bounds(), my_image, my_image.bounds());