基于esp32系列开发-浅谈micropython中的framebuf库
在esp32系列开发中,浅谈用到的micropython库framebuf,描述frambuf颜色空间和具体细节
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_VLSB和RGB565,仅对这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:横坐标,int
y:纵坐标,int
c:颜色,int,0-0xffff之间
hline(x,y,w,c)
# 作用:画横线
参数:
x:横坐标,int
y:纵坐标,int
w:线长,int
c:颜色,int,0-0xffff之间
vline(x,y,w,c)
# 作用:画竖线
参数:
x:横坐标,int
y:纵坐标,int
w:线长,int
c:颜色,int,0-0xffff之间
line(x1,y1,x2,y2,c)
# 作用:画线
参数:
x1:起始横坐标,int
y1:起始纵坐标,int
x2:终点横坐标,int
y2:终点纵坐标,int
c:颜色,int,0-0xffff之间
rect(x,y,w,h,c,f)
# 作用:画矩形
参数:
x:矩形左上角横坐标,int
y:矩形左上角纵坐标,int
w:矩形长,int
h:矩形宽,int
c:颜色,int,0-0xffff之间
f:是否填充矩形,int,0/1
ellipse(x,y,xr,yr,c,f)
# 作用:画椭圆
参数:
x:中点横坐标,int
y:中点纵坐标,int
xr:x轴半径,int
yr:y轴半径,int
c:颜色,int,0-0xffff之间
f:是否填充矩形,int,0/1
poly(x,y,coords,c,f)
# 作用:画多边形
参数:
x:基准点横坐标,int
y:基准点纵坐标,int
coords:多边形每个点的坐标,array
c:颜色,int,0-0xffff之间
f:是否填充矩形,int,0/1
例如:
poly(10,10,array('h',[0,0,50,20,20,40]),1000,1)
注意 from array import array
text(s,x,y,c)
# 作用:画ascll字符(a,A,b,B...)
参数:
s:字符串
x:左上角横坐标,int
y:左上角纵坐标,int
c:颜色,int,0-0xffff之间
blit(fbuf,x,y,key=-1,palette=None)
# 作用:画图片
参数:
fbuf:framebuf.FrameBuffer格式的缓冲区
x:左上角横坐标,int
y:左上角纵坐标,int
key,当palette没有被设置时,如果key=0xf500,那么fbuf中颜色为0xf500的像素点将是透明的;
如果palette被设置了,那么palette中与key相同的颜色将被视作透明
更多推荐
所有评论(0)