@@ -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