掌控板micropython编程实现在OLED上显示bmp图像
1.设置输出格式
打开PCtoLCD2002软件,点击“选项”菜单,设置选项如图1所示。其中,点阵格式:阴码;取模走向:顺向;输出数制:十六进制。设置自定义格式设置如图1所示。
2.生成字模
打开“文件”菜单下的“打开”菜单项,选择要显示的bmp格式文件,如图2所示。打开logo.bmp文件后,在软件中显示打开的bmp文件点阵图像,如图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所示。
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所示。
打开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程序中即可。