二进制图片

This commit is contained in:
jeremygan2021
2025-11-26 17:29:16 +08:00
parent 5c36736141
commit 22aa782648
42 changed files with 2144 additions and 2 deletions

166
tool/example_usage.py Normal file
View File

@@ -0,0 +1,166 @@
#!/usr/bin/env python3
"""
示例如何在ESP32项目中使用转换后的图片数据
"""
# 假设你已经使用图片转换工具将图片转换为example_image.py
# 其中包含以下内容:
# example_image = bytearray(b'\x00\x00\x00\x0...')
# 1. 导入转换后的图片数据
# from example_image import example_image
# 2. 在image.py中使用图片数据
"""
# image.py 中的示例代码
import framebuf
from machine import Pin, SPI
import epaper4in2
import time
import config
def run(img_data=None):
# 如果没有提供图片数据,使用默认图片
if img_data is None:
# 可以在这里设置默认图片
img_data = None
try:
# 初始化墨水屏
epd = epaper4in2.EPD()
epd.init()
# 创建帧缓冲区
buf = bytearray(config.WIDTH * config.HEIGHT // 8)
fb = framebuf.FrameBuffer(buf, config.WIDTH, config.HEIGHT, framebuf.MONO_HLSB)
if img_data is not None:
# 使用提供的图片数据
# 根据图片数据长度判断图片尺寸
data_length = len(img_data)
# 常见尺寸检查
if data_length == 128 * 296 // 8: # 128x296
img_width, img_height = 128, 296
elif data_length == 400 * 300 // 8: # 400x300
img_width, img_height = 400, 300
else:
# 默认尺寸
img_width, img_height = 400, 300
# 计算居中位置
x_offset = (config.WIDTH - img_width) // 2
y_offset = (config.HEIGHT - img_height) // 2
# 将图片数据复制到帧缓冲区
for y in range(img_height):
for x in range(img_width):
# 计算源位置
src_byte_index = y * ((img_width + 7) // 8) + x // 8
src_bit_position = 7 - (x % 8)
# 获取像素值
pixel = (img_data[src_byte_index] >> src_bit_position) & 1
# 计算目标位置
dst_x = x_offset + x
dst_y = y_offset + y
if 0 <= dst_x < config.WIDTH and 0 <= dst_y < config.HEIGHT:
fb.pixel(dst_x, dst_y, pixel)
else:
# 如果没有图片数据,显示测试图案
fb.fill(0)
fb.rect(10, 10, config.WIDTH-20, config.HEIGHT-20, 1)
fb.text("No Image Data", 50, config.HEIGHT//2, 1)
# 显示图片
epd.display_frame(buf)
# 等待一段时间
time.sleep(5)
# 清屏并进入深度睡眠
epd.clear()
epd.sleep()
except Exception as e:
print(f"显示图片时出错: {e}")
# 清屏并进入深度睡眠
epd.clear()
epd.sleep()
"""
# 3. 在boot.py中设置RUN_MODE=3
"""
# boot.py 中的示例代码
import machine
import time
import config
# 设置运行模式
# 0: 正常运行模式
# 1: WiFi连接模式
# 2: 配置模式
# 3: 图片显示模式
RUN_MODE = 3
if RUN_MODE == 3:
# 导入图片数据
from example_image import example_image
# 导入图片显示模块
import image
# 显示图片
image.run(example_image)
"""
# 4. 使用不同的图片
"""
# 你可以根据需要导入不同的图片数据
# 显示黑色背景白色文本的图片
from example_dark import example_dark
image.run(example_dark)
# 显示白色背景黑色文本的图片
from example_light import example_light
image.run(example_light)
# 显示旋转的图片
from example_rotated import example_rotated
image.run(example_rotated)
# 显示文本图片
from hello_text import hello_text
image.run(hello_text)
"""
# 5. 动态选择图片
"""
# 你可以根据条件动态选择要显示的图片
def display_image_by_condition(condition):
if condition == "dark":
from example_dark import example_dark
return example_dark
elif condition == "light":
from example_light import example_light
return example_light
elif condition == "rotated":
from example_rotated import example_rotated
return example_rotated
else:
from hello_text import hello_text
return hello_text
# 使用示例
img_data = display_image_by_condition("dark")
image.run(img_data)
"""
print("这是一个示例文件展示了如何在ESP32项目中使用转换后的图片数据。")
print("请参考注释中的代码示例,根据你的实际需求进行修改。")