OLED如何显示图像、播放视频

使用二进制数据来显示点阵

  • 在只有“黑”,“白”两种状态的屏幕中,一个像素占用一个bit,而一个字节具有8个bit (1Byte=8bit)。为了实现对图像数据利用的最大化,我们一般会使用二进制点的形式对图像进行绘制。

  • 如下图,在这幅图中我们有一个16x16的图片矩阵,它组成了一个“土”字。我们从右下角开始网上扫描点,每8个点对应一个Byte。这样原本需要16x16=256字节的图像,就可以使用32字节标识出来了。体积减小了8倍。

显示图片的代码实现

  • 我写了一个二进制点阵生成程序,它的下载地址为:

  • 这个程序支持图片,文字和视频转换为点阵。它生成的文件为一个二进制文件,里面的字节数为:

  • byte=wh8+2 byte=\frac{w*h}{8}+2

  • 其中前2个字节中,第一字节代表每一列所含的字节数(例如16x16点阵中,这个数值就是2),而第二个字节代表每行所含字节数(例如16x16点阵中,这个数值就是16)。

  • 从上面的介绍可以看出,图片的高度必须为8的倍数

  • 显示图面的完整代码为:

def blit(self,x,y,res='code',dir='fonts',invert=False):
      if not dir in os.listdir(): return
      if not res in os.listdir(dir):return
      with open(dir+'/'+res,'rb') as f:
        height=ord(f.read(1))
        width=ord(f.read(1))
        for w in range(width):
          for h in range(height):
            code=ord(f.read(1))
            for i in range(8):
              if code&(1<<i): self.pixel(x+w,y+i+h*8,not invert)
              else: self.pixel(x+w,y+i+h*8,invert)
作者:admin  创建时间:2024-05-24 11:32
最后编辑:admin  更新时间:2024-07-17 11:01