Files
ESP32_GDEY042T81_server/tool/example_usage.py
jeremygan2021 22aa782648 二进制图片
2025-11-26 17:29:16 +08:00

166 lines
4.6 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/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("请参考注释中的代码示例,根据你的实际需求进行修改。")