micropython framebuf库的blit函数使用详解

blit函数原描述:

简单来说,blit就是把一张图片放到画布上,可以用这个函数在屏幕绘制你想要的图片,如果把中文看成图片,那么就可以利用此函数实现中文显示。

假设整个画布是用变量fb存储的。而需要绘制的图片已经编码好了并放在变量buf中。

一个像素2字节表示颜色,按我们平时书写的顺序依次存放每个像素就完成编码。

假定这个图片是32*32的,那么可以通过如下函数放置:

python 复制代码
fbuf=framebuf.FrameBuffer(buf,32,32,framebuf.RGB565)
fb.blit(fbuf,x,y)

第一行表示将图片编码转为FrameBuffer格式,并规定宽高

第二行表示在x,y绘制图片,x,y是图片的左上角定位

就是这么简单。

接着让我们实现中文显示。

先确定需求,中文显示函数接收中文字符串,还有放置位置,字体颜色

这与普通的图片放置不同,字体线条可以设置颜色,其他地方需要留白透明化以显示背景,稍微有些复杂

blit的第4个参数接受1个int,该int代表颜色,假设

python 复制代码
fb.blit(fbuf,x,y,1000)

fbuf里颜色值为1000的像素将被视作透明,不会绘制

但是,我们可能在多种背景下绘制中文,每个背景绘制中文都需要传入背景色,太麻烦了,不优雅,那有没有更好的方法?

blit第5个参数,中文叫调色板,可以来解决这个问题。

在取字模时,存储的位图是单色的,所以在转FrameBuffer格式时,如下:

python 复制代码
buf=FrameBuffer(cn_to_byte(char),16,16,framebuf.MONO_VLSB)

其中,cn_to_byte函数是根据中文字符寻找对应字模的,其中字模以bytearray格式存储。16*16的大小。以特定的扫描方式。

python 复制代码
fb.blit(buf,x,y,0,palette_fb)

当调色板被设置时,地4个参数将会与调色板进行比较,将对于颜色视作透明。

一般的,调色板如下:

python 复制代码
palette_fb = FrameBuffer(bytearray([0,0,c1,c2]), 2, 1, framebuf.RGB565)

调色板必须为FrameBuffer格式,高为1个像素,宽为2个像素,代表背景色和前景色,每个像素用2个字节表示颜色,当第4个参数也就是key与调色板中的背景色相同时,就视作透明,前景色就是字体的颜色。

前面2个0表示背景色为0x0000,后面的c1表示前景色的前8位,c2表示前景色的后8位。

这样就可以实现我们想要的效果。

具体示例:1.44 tft LCD 128*128

相关推荐
魔障阿Q14 分钟前
windows使用bat脚本激活conda环境
人工智能·windows·python·深度学习·conda
洋芋爱吃芋头21 分钟前
hadoop中的序列化和反序列化(3)
大数据·hadoop·python
零炻大礼包43 分钟前
【MCP】服务端搭建(python和uv环境搭建、nodejs安装、pycharma安装)
开发语言·python·uv·mcp
来自星星的坤1 小时前
Python 爬虫基础入门教程(超详细)
开发语言·爬虫·python
Star Curry1 小时前
【读书笔记】《编码:隐匿在计算机软硬件背后的语言》01 逻辑与开关
stm32·单片机·嵌入式硬件·职场和发展·51单片机·学习方法
Dxy12393102162 小时前
Python+OpenCV实现手势识别与动作捕捉:技术解析与应用探索
开发语言·python·opencv
宁酱醇2 小时前
递归函数(斐波那契数列0,1,1,2,3,5,8,13,21,34,55...)
开发语言·python
蹦蹦跳跳真可爱5892 小时前
Python----神经网络(《Deep Residual Learning for Image Recognition》论文和ResNet网络结构)
人工智能·python·深度学习·神经网络
浩皓素2 小时前
Python网络爬虫:从入门到实践
爬虫·python
编程自留地2 小时前
第11次:用户注册(完整版)
python·django·商城