@@ -635,29 +635,18 @@ def pbm(self, file, x, y, key: int = -1, show: bool = None, clear: bool = None,
635
635
_width , _height = [int (value ) for value in f .readline ().split ()] # 获取图片的宽度和高度
636
636
f_read = f .read
637
637
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 模式
653
639
data = bytearray (f_read ())
654
640
if invert :
655
641
# data = bytearray([~b & 0xFF for b in data]) # Old
656
642
color , bg_color = bg_color , color # New
657
643
# data = self._reverse_byte_data(data)
658
644
if color_type == "MONO" :
659
645
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 )
661
650
elif color_type == "RGB565" :
662
651
fbuf = FrameBuffer (data , _width , _height , MONO_HLSB )
663
652
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,
671
660
except AttributeError :
672
661
pass
673
662
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
+
674
678
elif file_format == b"P6\n " : # P6 像素图 二进制
675
679
max_pixel_value = f .readline () # 获取最大像素值
676
680
r_height = range (_height )
0 commit comments