欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 建筑 > 基于esp32系列开发-浅谈micropython中的framebuf库

基于esp32系列开发-浅谈micropython中的framebuf库

2025/2/1 20:23:20 来源:https://blog.csdn.net/supermodule/article/details/144868219  浏览:    关键词:基于esp32系列开发-浅谈micropython中的framebuf库

framebuf库定义了几个常量,用来描述缓冲区的类型:

  • MONO_VLSB:单色模式,竖直8bits为单位从左往右扫描,接着下8行继续扫描,8bit低位在上
  • MONO_HLSB:单色模式,水平8bits为单位从左往右刷新,接着从下一行如此,8bit高位在左
  • MONO_HMSB:单色模式,水平8bits为单位从左往右刷新,接着从下一行如此,8bit低位在左
  • RGB565:Red Green Blue (16-bit, 5+6+5) color format
  • GS2_HMSB:Grayscale (2-bit) color format
  • GS2_HMSB:Grayscale (4-bit) color format
  • GS8:Grayscale (8-bit) color format

在开发中,我常用的是MONO_VLSBRGB565,仅对这2常量描述

在屏幕的驱动中,micropython使用帧缓存的概念:一个变量存储着帧,如果是0.96oled,这个变量就描述128*64像素图片;如果是1.44tft LCD,这个变量就描述128*128像素的图片。你可以修改这个变量,在这个变量改变像素点的颜色。当需要在屏幕显示时,则调用show方法将这个变量传送给屏幕的驱动芯片,然后就可以在屏幕上看到内容了。

对于MONO_VLSB类型的缓冲区,常用在oled上,在自定义字符、取模的时候,需要注意按照相应的扫描方式进行取模,否则不能正确显示字符。

对于RGB565类型的缓冲区,常用在LCD屏幕,表示1个像素点可以用16bit描述颜色,红色占用5个bit,绿色占用6个bit,蓝色占用5个bit。对于一个颜色区域,高位表示的颜色更深。比如:0b10000 000000 00000 表示的红色就比0b01000 000000 00000要深,其余以此类推。

framebuf类型的缓冲区自带一些画图的方法,你可以调用函数来画图。

但是要注意,这些函数的颜色参数并不是RGB565格式,假设RGB565格式用这个字符串表示:color=‘RRRRRGGGGGGBBBBBB’,那么,缓冲区自带的函数的颜色参数格式就是color[8:]+color[:8],就是将原来的16bit分为前8bit和后8bit,并把这2组bit前后调换顺序再拼接成新的,所以,如果你需要统一颜色格式,就需要做些转化。

fill(c)
# 作用:全屏填充参数:c: 颜色,int,0-0xffff之间pixel(x,y,c=1)
# 作用:画点参数:x:横坐标,inty:纵坐标,intc:颜色,int,0-0xffff之间hline(x,y,w,c)
# 作用:画横线参数:x:横坐标,inty:纵坐标,intw:线长,intc:颜色,int,0-0xffff之间vline(x,y,w,c)
# 作用:画竖线参数:x:横坐标,inty:纵坐标,intw:线长,intc:颜色,int,0-0xffff之间line(x1,y1,x2,y2,c)
# 作用:画线参数:x1:起始横坐标,inty1:起始纵坐标,intx2:终点横坐标,inty2:终点纵坐标,intc:颜色,int,0-0xffff之间rect(x,y,w,h,c,f)
# 作用:画矩形参数:x:矩形左上角横坐标,inty:矩形左上角纵坐标,intw:矩形长,inth:矩形宽,intc:颜色,int,0-0xffff之间f:是否填充矩形,int,0/1ellipse(x,y,xr,yr,c,f)
# 作用:画椭圆参数:x:中点横坐标,inty:中点纵坐标,intxr:x轴半径,intyr:y轴半径,intc:颜色,int,0-0xffff之间f:是否填充矩形,int,0/1poly(x,y,coords,c,f)
# 作用:画多边形参数:x:基准点横坐标,inty:基准点纵坐标,intcoords:多边形每个点的坐标,arrayc:颜色,int,0-0xffff之间f:是否填充矩形,int,0/1例如:poly(10,10,array('h',[0,0,50,20,20,40]),1000,1)注意 from array import arraytext(s,x,y,c)
# 作用:画ascll字符(a,A,b,B...)参数:s:字符串x:左上角横坐标,inty:左上角纵坐标,intc:颜色,int,0-0xffff之间blit(fbuf,x,y,key=-1,palette=None)
# 作用:画图片参数:fbuf:framebuf.FrameBuffer格式的缓冲区x:左上角横坐标,inty:左上角纵坐标,intkey,当palette没有被设置时,如果key=0xf500,那么fbuf中颜色为0xf500的像素点将是透明的;如果palette被设置了,那么palette中与key相同的颜色将被视作透明

参考实例:1.44tft LCD 128*128,0.96oled 128*64 I2C

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com