掌控板micropython编程实现在OLED上显示bmp图像

掌控板micropython编程实现在OLED上显示bmp图像

1.设置输出格式

打开PCtoLCD2002软件,点击“选项”菜单,设置选项如图1所示。其中,点阵格式:阴码;取模走向:顺向;输出数制:十六进制。设置自定义格式设置如图1所示。

在这里插入图片描述

图1 “选项”设置

2.生成字模

打开“文件”菜单下的“打开”菜单项,选择要显示的bmp格式文件,如图2所示。打开logo.bmp文件后,在软件中显示打开的bmp文件点阵图像,如图3所示。点击“生成字模”按钮,在软件的下方生成了bmp文件的图像点阵十六进制数据,如图4所示。

在这里插入图片描述

图2 “打开”文件窗口

在这里插入图片描述

图3 bmp文件图像点阵

在这里插入图片描述

图4 生成的图像点阵数据

3. 图像点阵数据处理

复制生成的图像点阵数据到记事本中,提取数据部分,去掉多余的信息,数据如下所示:

0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x7F,0xF0,0xFF,0x07,0xFF,0xF8,0x3F,0x3F,0x83,0xF8,0x00,0x00,0x00,
0x00,0x00,0x00,0xFF,0xF8,0x7F,0x07,0xF7,0xF8,0x3F,0x3F,0x83,0xF8,0x00,0x00,0x00,
0x00,0x00,0x01,0xFF,0xFC,0x7F,0x8F,0xE7,0xFC,0x3F,0x3F,0x83,0xF8,0x00,0x00,0x00,
0x00,0x00,0x03,0xFF,0xFE,0x3F,0x8F,0xE7,0xFC,0x3F,0x3F,0x83,0xF8,0x00,0x00,0x00,
0x00,0x00,0x03,0xFF,0xFE,0x3F,0xDF,0xC7,0xFE,0x3F,0x3F,0x83,0xF8,0x00,0x00,0x00,
0x00,0x00,0x03,0xF8,0xFE,0x1F,0xDF,0xC7,0xFF,0x3F,0x3F,0x83,0xF8,0x00,0x00,0x00,
0x00,0x00,0x03,0xFE,0x00,0x1F,0xFF,0x87,0xFF,0x3F,0x3F,0x83,0xF8,0x00,0x00,0x00,
0x00,0x00,0x03,0xFF,0xE0,0x0F,0xFF,0x87,0xFF,0xBF,0x3F,0x83,0xF8,0x00,0x00,0x00,
0x00,0x00,0x03,0xFF,0xF8,0x0F,0xFF,0x07,0xFF,0xBF,0x3F,0x83,0xF8,0x00,0x00,0x00,
0x00,0x00,0x01,0xFF,0xFE,0x07,0xFF,0x07,0xFF,0xFF,0x3F,0x83,0xF8,0x00,0x00,0x00,
0x00,0x00,0x00,0xFF,0xFE,0x03,0xFE,0x07,0xFF,0xFF,0x3F,0x83,0xF8,0x00,0x00,0x00,
0x00,0x00,0x00,0x3F,0xFF,0x03,0xFE,0x07,0xF7,0xFF,0x3F,0x83,0xF8,0x00,0x00,0x00,
0x00,0x00,0x00,0x07,0xFF,0x01,0xFC,0x07,0xF7,0xFF,0x3F,0x83,0xF8,0x00,0x00,0x00,
0x00,0x00,0x07,0xF0,0x7F,0x01,0xFC,0x07,0xF3,0xFF,0x3F,0x83,0xF8,0x00,0x00,0x00,
0x00,0x00,0x07,0xF8,0x7F,0x01,0xFC,0x07,0xF3,0xFF,0x3F,0xC7,0xF8,0x00,0x00,0x00,
0x00,0x00,0x07,0xFF,0xFF,0x01,0xFC,0x07,0xF1,0xFF,0x1F,0xFF,0xF0,0x00,0x00,0x00,
0x00,0x00,0x03,0xFF,0xFE,0x01,0xFC,0x07,0xF1,0xFF,0x1F,0xFF,0xF0,0x00,0x00,0x00,
0x00,0x00,0x01,0xFF,0xFE,0x01,0xFC,0x07,0xF0,0xFF,0x0F,0xFF,0xE0,0x00,0x00,0x00,
0x00,0x00,0x00,0xFF,0xFC,0x01,0xFC,0x07,0xF0,0xFF,0x07,0xFF,0xC0,0x00,0x00,0x00,
0x00,0x00,0x00,0x7F,0xF0,0x01,0xFC,0x07,0xF0,0x7F,0x03,0xFF,0x80,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,

由于SSD1106 OLED是单色模式,即每个像素的颜色不是黑就是白色,用二进制表示就是0或1。在选项设置时,使用的是阴码,因此0代表黑色,1代表白色。若选项设置的是阳码,则1代表黑色,0代表白色。生成的数据是16列64行,每一个十六进制数据代表8个像素的颜色。若数据是0xFC,则对应的二进制数是11111100,即所对应的8个像素的颜色分别是“白白白白白白黑黑”。SSD1106 OLED的分辨率是128*64,所以每一行的16个十六进制数是64 * 8=128。

4. OLED显示图像程序

将生成的数据复制到程序中

from machine import Pin, I2C
from ssd1106 import SSD1106_I2C
from framebuf import FrameBuffer

# 初始化I2C接口
i2c = I2C(scl=Pin(22), sda=Pin(23), freq=100000)

# 初始化OLED显示屏
oled = SSD1106_I2C(128, 64, i2c)


# 位图数据,每个字节的位表示一个像素,0表示黑色,1表示白色

#图片bitmap数组
bmp = bytearray([\
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x7F,0xF0,0xFF,0x07,0xFF,0xF8,0x3F,0x3F,0x83,0xF8,0x00,0x00,0x00,
0x00,0x00,0x00,0xFF,0xF8,0x7F,0x07,0xF7,0xF8,0x3F,0x3F,0x83,0xF8,0x00,0x00,0x00,
0x00,0x00,0x01,0xFF,0xFC,0x7F,0x8F,0xE7,0xFC,0x3F,0x3F,0x83,0xF8,0x00,0x00,0x00,
0x00,0x00,0x03,0xFF,0xFE,0x3F,0x8F,0xE7,0xFC,0x3F,0x3F,0x83,0xF8,0x00,0x00,0x00,
0x00,0x00,0x03,0xFF,0xFE,0x3F,0xDF,0xC7,0xFE,0x3F,0x3F,0x83,0xF8,0x00,0x00,0x00,
0x00,0x00,0x03,0xF8,0xFE,0x1F,0xDF,0xC7,0xFF,0x3F,0x3F,0x83,0xF8,0x00,0x00,0x00,
0x00,0x00,0x03,0xFE,0x00,0x1F,0xFF,0x87,0xFF,0x3F,0x3F,0x83,0xF8,0x00,0x00,0x00,
0x00,0x00,0x03,0xFF,0xE0,0x0F,0xFF,0x87,0xFF,0xBF,0x3F,0x83,0xF8,0x00,0x00,0x00,
0x00,0x00,0x03,0xFF,0xF8,0x0F,0xFF,0x07,0xFF,0xBF,0x3F,0x83,0xF8,0x00,0x00,0x00,
0x00,0x00,0x01,0xFF,0xFE,0x07,0xFF,0x07,0xFF,0xFF,0x3F,0x83,0xF8,0x00,0x00,0x00,
0x00,0x00,0x00,0xFF,0xFE,0x03,0xFE,0x07,0xFF,0xFF,0x3F,0x83,0xF8,0x00,0x00,0x00,
0x00,0x00,0x00,0x3F,0xFF,0x03,0xFE,0x07,0xF7,0xFF,0x3F,0x83,0xF8,0x00,0x00,0x00,
0x00,0x00,0x00,0x07,0xFF,0x01,0xFC,0x07,0xF7,0xFF,0x3F,0x83,0xF8,0x00,0x00,0x00,
0x00,0x00,0x07,0xF0,0x7F,0x01,0xFC,0x07,0xF3,0xFF,0x3F,0x83,0xF8,0x00,0x00,0x00,
0x00,0x00,0x07,0xF8,0x7F,0x01,0xFC,0x07,0xF3,0xFF,0x3F,0xC7,0xF8,0x00,0x00,0x00,
0x00,0x00,0x07,0xFF,0xFF,0x01,0xFC,0x07,0xF1,0xFF,0x1F,0xFF,0xF0,0x00,0x00,0x00,
0x00,0x00,0x03,0xFF,0xFE,0x01,0xFC,0x07,0xF1,0xFF,0x1F,0xFF,0xF0,0x00,0x00,0x00,
0x00,0x00,0x01,0xFF,0xFE,0x01,0xFC,0x07,0xF0,0xFF,0x0F,0xFF,0xE0,0x00,0x00,0x00,
0x00,0x00,0x00,0xFF,0xFC,0x01,0xFC,0x07,0xF0,0xFF,0x07,0xFF,0xC0,0x00,0x00,0x00,
0x00,0x00,0x00,0x7F,0xF0,0x01,0xFC,0x07,0xF0,0x7F,0x03,0xFF,0x80,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,])

# 创建一个FrameBuffer对象
buffer=bytearray(bmp)
fbuf = FrameBuffer(oled.buffer, 128, 64,  0)

# 将位图数据转换为FrameBuffer可以理解的格式
for y in range(64):
    for x in range(128):
        b = (bmp[(y * 128 + x) // 8] >> (7 - (x % 8))) & 1
        fbuf.pixel(x, y, b)   
# bmp[(y * 128 + x) // 8]计算了当前像素点在 bmp 数组中的字节位置。由于每个字节包含8位,所以需要将像素的总数量除以8来得到字节索引。
# >> (7 - (x % 8))这部分将当前像素点在字节中的位移动到最低位(即右边第一个位)。因为位图的存储通常是从高位到低位,所以需要将当前像素点的位右移,使其成为最低位。
# & 1这部分是将移动后的位与1进行按位与操作,这样可以获取当前像素点的值,要么是0(黑色),要么是1(白色)。
# 刷新显示屏以显示图像
oled.show()

5. 运行结果

在thonny软件中,上传程序到掌控板中,运行结果如图5所示。

在这里插入图片描述

图5 运行结果

6. python编程实现提取bmp图像点阵数据

除了使用软件生成图像点阵数据,也可以使用python编程实现了提取bmp图像点阵数据,并在运行结果中打印二进制,显示OLED显示效果。代码如下:

from PIL import Image  
  
def bmp_to_black_white_c51(bmp_path, output_byte_array):  
    # 打开BMP文件  
    img = Image.open(bmp_path).convert('L')  # 转换为灰度图  
  
    # 应用阈值将灰度图转换为黑白图  
    threshold = 128  
    bw_img = img.point(lambda p: p > threshold and 255 or 0, '1')  
  
    # 获取图像的宽度和高度  
    width, height = bw_img.size  
  
    # 初始化一个空的字节数组来存储结果  
    byte_data = bytearray()  
  
    # 遍历图像的每一行和每一列,将每8个像素打包成一个字节  
    for y in range(height):  
        for x in range(0, width, 8):  # 每次处理8个像素  
            byte_value = 0  
            for bit in range(8):  
                try:  
                    pixel = bw_img.getpixel((x + bit, y))  
                    byte_value = (byte_value << 1) | (pixel // 255)  # 将像素值(0或255)转换为0或1  
                except IndexError:  
                    # 如果x+bit超出了图像的宽度,则忽略这些像素(填充0)  
                    byte_value = (byte_value << 1) | 0  
            byte_data.append(byte_value)  
  
    # 将字节数组转换为16进制字符串列表(每两个字节一个字符串),适用于C51格式  
    hex_strings = ['{:02X}'.format(byte) for byte in byte_data]  
  
    combined_hex = []  
    for i in range(0, len(hex_strings), 8):  # 假设每8个字节(64个像素)合并一次(这里仅为示例)  
        byte_group = hex_strings[i:i+8]  
        combined_value = int(''.join(byte_group), 16)  # 将8个16进制数字符串合并为一个整数  
        combined_hex.append('{:016X}'.format(combined_value))  # 转换为16位的16进制字符串  
  
    output_byte_array.extend(byte_data)  # 将处理后的字节数据添加到输出字节数组中  
  
 
output_data = bytearray()  
bmp_to_black_white_c51('logo.bmp', output_data)  
  
# 打印输出字节数组的二进制表示(用于验证)  
print('Output byte array in hex:')  
for i,byte in enumerate(output_data):
    print(f'{byte:08b}', end='') 
    if (i + 1) % 16 == 0 or i == len(output_data) - 1:
        print('')
  
# 将输出字节数组保存到文件  
with open('output_data.txt', 'w') as f:  
    f.write('bytearray([\\ \n')  
    for i, byte in enumerate(output_data):  
        f.write(f'0x{byte:02X}')  
        if (i + 1) % 16 == 0 or i == len(output_data) - 1:  # 每行16个字节,最后一个字节后也换行  
            f.write(',\n')  
        else:  
            f.write(',')  
    f.write('])\n')

打印的二进制数据如图6所示。

在这里插入图片描述

图6 打印的二进制文件

打开output_data.txt文件,输出的数据如下:

bytearray([\ 
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,
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,
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,
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,0xE0,0x3F,0x81,0xFC,0x0C,0x0F,0xC0,0xE0,0xFE,0x0F,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0x80,0x0F,0x80,0xF8,0x1C,0x07,0xC0,0xE0,0xFE,0x0F,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0x00,0x07,0xC0,0xF8,0x1C,0x07,0xC0,0xE0,0xFE,0x0F,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFE,0x00,0x03,0xC0,0x70,0x3C,0x03,0xC0,0xE0,0xFE,0x0F,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFE,0x07,0x03,0xE0,0x70,0x3C,0x03,0xC0,0xE0,0xFE,0x0F,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFC,0x0F,0x81,0xF0,0x60,0x7C,0x01,0xC0,0xE0,0xFE,0x0F,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFC,0x07,0xFF,0xF0,0x20,0x7C,0x01,0xC0,0xE0,0xFE,0x0F,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFE,0x00,0x7F,0xF8,0x00,0xFC,0x00,0xC0,0xE0,0xFE,0x0F,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFE,0x00,0x0F,0xF8,0x00,0xFC,0x00,0x40,0xE0,0xFE,0x0F,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0x00,0x03,0xFC,0x01,0xFC,0x00,0x40,0xE0,0xFE,0x0F,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0x80,0x01,0xFC,0x01,0xFC,0x18,0x00,0xE0,0xFE,0x0F,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xE0,0x01,0xFE,0x03,0xFC,0x18,0x00,0xE0,0xFE,0x0F,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFE,0x01,0xFE,0x07,0xFC,0x1C,0x00,0xE0,0xFE,0x0F,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xFF,0x81,0xFF,0x07,0xFC,0x1C,0x00,0xE0,0x7C,0x0F,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFC,0x0F,0x81,0xFF,0x07,0xFC,0x1E,0x00,0xE0,0x7C,0x0F,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFC,0x03,0x01,0xFF,0x07,0xFC,0x1E,0x00,0xE0,0x00,0x0F,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFE,0x00,0x01,0xFF,0x07,0xFC,0x1F,0x00,0xF0,0x00,0x1F,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFE,0x00,0x03,0xFF,0x07,0xFC,0x1F,0x80,0xF8,0x00,0x1F,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0x80,0x07,0xFF,0x07,0xFC,0x1F,0x80,0xFC,0x00,0x7F,0xFF,0xFF,0xFF,
0xFF,0xFF,0xFF,0xE0,0x3F,0xFF,0x07,0xFC,0x1F,0xC0,0xFF,0x01,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,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,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,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,
])

将此数据直接复制到micropython程序中即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值