Skip to content

Commit 88dca1e

Browse files
author
funnygeeker
committed
修复:PPM图片无法正常invert的BUG
1 parent d0c8b52 commit 88dca1e

File tree

2 files changed

+20
-16
lines changed

2 files changed

+20
-16
lines changed

lib/easydisplay.mpy

39 Bytes
Binary file not shown.

lib/easydisplay.py

+20-16
Original file line numberDiff line numberDiff line change
@@ -635,29 +635,18 @@ def pbm(self, file, x, y, key: int = -1, show: bool = None, clear: bool = None,
635635
_width, _height = [int(value) for value in f.readline().split()] # 获取图片的宽度和高度
636636
f_read = f.read
637637
if file_format == b"P4\n": # P4 位图 二进制
638-
if self._buffer == 0: # 直接驱动
639-
buffer_size = self.BUFFER_SIZE
640-
if invert: # New
641-
color, bg_color = bg_color, color
642-
palette = self._calculate_palette(color, bg_color) # 计算调色板
643-
dp.set_window(x, y, x + _width - 1, y + _height - 1) # 设置窗口
644-
data = f_read(buffer_size)
645-
write_data = dp.write_data
646-
while data:
647-
# if invert: # Old
648-
# data = bytes([~b & 0xFF for b in data])
649-
buffer = self._flatten_byte_data(data, palette)
650-
write_data(buffer)
651-
data = f_read(buffer_size) # 30 * 8 = 240, 理论上 ESP8266 的内存差不多能承载这个大小的彩色图片
652-
else: # Framebuffer 模式
638+
if self._buffer: # Framebuffer 模式
653639
data = bytearray(f_read())
654640
if invert:
655641
# data = bytearray([~b & 0xFF for b in data]) # Old
656642
color, bg_color = bg_color, color # New
657643
# data = self._reverse_byte_data(data)
658644
if color_type == "MONO":
659645
fbuf = FrameBuffer(data, _width, _height, MONO_HLSB)
660-
dp.blit(fbuf, x, y, key)
646+
palette = FrameBuffer(bytearray(1), 2, 1, MONO_HLSB)
647+
palette.pixel(1, 0, color)
648+
palette.pixel(0, 0, bg_color)
649+
dp.blit(fbuf, x, y, key, palette)
661650
elif color_type == "RGB565":
662651
fbuf = FrameBuffer(data, _width, _height, MONO_HLSB)
663652
palette = FrameBuffer(bytearray(2 * 2), 2, 1, RGB565)
@@ -671,6 +660,21 @@ def pbm(self, file, x, y, key: int = -1, show: bool = None, clear: bool = None,
671660
except AttributeError:
672661
pass
673662

663+
else: # 直接驱动
664+
buffer_size = self.BUFFER_SIZE
665+
if invert: # New
666+
color, bg_color = bg_color, color
667+
palette = self._calculate_palette(color, bg_color) # 计算调色板
668+
dp.set_window(x, y, x + _width - 1, y + _height - 1) # 设置窗口
669+
data = f_read(buffer_size)
670+
write_data = dp.write_data
671+
while data:
672+
# if invert: # Old
673+
# data = bytes([~b & 0xFF for b in data])
674+
buffer = self._flatten_byte_data(data, palette)
675+
write_data(buffer)
676+
data = f_read(buffer_size) # 30 * 8 = 240, 理论上 ESP8266 的内存差不多能承载这个大小的彩色图片
677+
674678
elif file_format == b"P6\n": # P6 像素图 二进制
675679
max_pixel_value = f.readline() # 获取最大像素值
676680
r_height = range(_height)

0 commit comments

Comments
 (0)