掌控板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))) & 1fbuf.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程序中即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1557300.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

六、索引的数据结构

文章目录 1. 为什么使用索引2. 索引及其优缺点2.1 索引概述2.2 优点2.3 缺点3. InnoDB中索引的推演3.1 索引之前的查找3.1.1 在一个页中的查找3.1.2 在很多页中查找3.2 设计索引3.2.1 一个简单的索引设计方案3.2.2 InnoDB中的索引方案3.3 常见索引概念3.3.1 聚簇索引3.3.2 二级…

【Linux】线程与线程安全知识总结

向外张望的人在做梦&#xff0c; 向内审视的人才是清醒的。 --- 荣格 --- 我最近复习了线程安全这部分知识&#xff0c;将不明白的问题总结出来&#xff0c;并通过AI进行问答帮助我进行学习巩固。本人能力有限 &#xff0c;可能有些内容不准确&#xff0c;望各位大佬海涵&am…

_c++11

嗨喽大家好呀&#xff0c;今天阿鑫给大家带来的是c进阶——c11的内容&#xff0c;好久不见啦&#xff0c;下面让我们进入本节博客的内容吧&#xff01; _c11 统一的列表初始化右值引用可变模板参数(了解&#xff0c;不常接触)lambda表达式function和bind包装器 1. 统一的列表…

气膜体育馆:解决场地困境的新选择—轻空间

北京市近日出台了关于规范和加强新建充气膜体育建筑的指导意见&#xff0c;旨在有效解决区域体育配套不足的问题。这一政策的出台&#xff0c;不仅为全民健身打造了新的载体&#xff0c;也为校园体育设施建设指明了方向。 满足日益增长的健身需求 随着人们健康意识的提升&#…

Skyeye 云智能制造 v3.14.8 发布,ERP 商城 + AI

Skyeye 云智能制造&#xff0c;采用 Springboot winUI 的低代码平台、移动端采用 UNI-APP。包含 30 多个应用模块、50 多种电子流程&#xff0c;CRM、PM、ERP、MES、ADM、EHR、笔记、知识库、项目、门店、商城、财务、多班次考勤、薪资、招聘、云售后、论坛、公告、问卷、报表…

openmmlab使用系列(二):图像超分辨率重构

文章目录 前言一、图像超分辨率重构简介二、mmmagic实现图像超分 前言 超分辨率重构技术&#xff0c;作为计算机视觉领域的一项重要研究课题&#xff0c;近年来受到了广泛关注。随着科技的飞速发展&#xff0c;人们对图像质量的要求越来越高&#xff0c;尤其是在智能手机、监控…

SpringBoot3实战:实现接口签名验证

有时候我们要把自己的服务暴露给第三方去调用&#xff0c;为了防止接口不被授权访问&#xff0c;我们一般采用接口签名的方式去保护接口。 接下来松哥和大家聊一聊这个话题。 一 场景分析 什么时候需要接口签名&#xff1f; 接口签名是一种重要的安全机制&#xff0c;用于确…

JAVA基础: synchronized 和 lock的区别、synchronized锁机制与升级

1 synchronized 和 lock的区别 synchronized是一个关键字&#xff0c; lock是一个接口&#xff0c;实际使用的是实现类 synchronized通过触发的是系统级别的锁机制&#xff0c; lock是API级别的锁机制 synchronized自动获得锁&#xff0c;自动释放锁。 lock需要通过方法获得锁…

[oeasy]python036_数据类型有什么用_type_类型_int_str_查看帮助

回忆上次内容 ord(c)和chr(i) 这是俩函数 这俩函数是一对 相反相成的⚖️ ord 通过 字符 找到对应的 序号chr 通过 序号 找到对应的 字符 为什么ord后面括弧里的参数 一定 要加引号不加不行 而chr后面括弧里的参数 又一定 不加引号加了不行呢&#xff1f;&#x1f914; TypeErr…

强基计划与少儿编程有什么关系?

近年来&#xff0c;编程教育逐渐在基础教育中崭露头角&#xff0c;成为培养孩子逻辑思维、创新能力和解决问题能力的重要手段。而2020年推出的强基计划则是一项面向高考生的特殊招生计划&#xff0c;旨在为基础学科&#xff08;如数学、物理、化学、生物、历史、哲学等&#xf…

MySQL 删除数据库

使用 mysqladmin 删除数据库 使用普通用户登陆MySQL服务器&#xff0c;你可能需要特定的权限来创建或者删除 MySQL 数据库。 所以我们这边使用root用户登录&#xff0c;root用户拥有最高权限&#xff0c;可以使用 MySQL mysqladmin 命令来删除数据库。 在删除数据库过程中&a…

双向数据库迁移工具:轻松实现 MySQL 与 SQLite 数据互导

项目概述与作用 该项目的核心是实现 MySQL 和 SQLite 两种数据库之间的数据迁移工具。它能够轻松地将 MySQL 数据库中的数据导出为 SQLite 数据库文件&#xff0c;反过来也可以将 SQLite 数据库中的数据上传到 MySQL 数据库中。这个双向迁移工具非常适用于&#xff1a; 数据库备…

51c自动驾驶~合集2

我自己的原文哦~ https://blog.51cto.com/whaosoft/11491137 #BEVWorld BEV潜在空间构建多模态世界模型&#xff0c;全面理解自动驾驶~一、引言 世界模型建模了有关环境的知识&#xff0c;其可以通过给定的条件对未来进行合理的想象。未来想象要求世界模型具有物理规律的理解…

利用 OpenAI 和 Python 预测股市行情

作者:老余捞鱼 原创不易,转载请标明出处及原作者。 写在前面的话: 本文介绍了如何利用 OpenAI 和 Python 进行股市情绪预测。主要通过使用 EODHD 提供的股市和金融新闻 API 来提取新闻数据,并利用 LangChain 和 OpenAI 的大型语言模型进行情感分析。 一、综述 …

如何在电脑上启动两个微信实例

前言 有时候&#xff0c;我们需要在电脑端登陆两个微信&#xff0c;来处理不同的事情&#xff0c;之前快速双击微信图标即可打开多个微信&#xff0c;最近发现不是太好使&#xff0c;所以今天介绍一种使用window命令启动两个微信的方法。 步骤 1、找到微信的安装目录&#x…

js逆向--某招标公告公示搜索引擎DES解密

js逆向--某招标公告公示搜索引擎DES解密 一、寻找数据接口二、寻找解密入口三、编写代码一、寻找数据接口 打开网页,在搜索框中输入关键词python。 试图通过按F12或者右键打开开发者工具,发现均没有反应。这时需要点击浏览器右上角的三个点,然后点击更多工具–开发者工具,…

增强分析:新时代的数据洞察工具

随着数据科学和人工智能的迅猛发展&#xff0c;分析数据的方式也发生了显著的变化。增强分析&#xff08;Augmented Analytics&#xff09;是近年来涌现出的新概念&#xff0c;它将人工智能&#xff08;AI&#xff09;、机器学习&#xff08;ML&#xff09;和自然语言处理&…

华为OD机试 - 实力差距最小总和(Java 2024 E卷 200分)

华为OD机试 2024E卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;E卷D卷A卷B卷C卷&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;私信哪吒&#xff0c;备注华为OD&#xff0c;加…

SpringBoot 集成 Redis

一&#xff1a;SpringBoot 集成 Redis ①Redis是一个 NoSQL&#xff08;not only&#xff09;数据库&#xff0c; 常作用缓存 Cache 使用。 ②Redis是一个中间件、是一个独立的服务器&#xff1b;常用的数据类型&#xff1a; string , hash ,set ,zset , list ③通过Redis客…

【2024年持续更新】国内ChatGPT-4中文镜像网站整理

目录 一、什么是ChatGPT镜像站&#xff1f; 二、GPT工具跟国内AI大模型整理 三、国内大模型与ChatGPT的区别 四、ChatGPT能做什么&#xff1f; 五、ChatGPT提示词教学 一、什么是ChatGPT镜像站&#xff1f; 镜像网站是指将原始网站的内容复制并放置在另一服务器上的网站。…