python将图片转换为Framebuffer裸数据格式(终端显示图片)

要在ubuntu终端显示图片或者在板子的LCD显示图片,Framebuffer是一个简单易用的接口,直接写入像素信息即可。

但普通的图片带有头部信息或者编码格式不同,直接送入Framebuffer是显示不出来的,需要扣出像素信息,并按照Framebuffer的RGBA顺序调整好,才能显示。所以现在的问题就是,如何获取framebuffer的信息,以及如何调整图片。

第一个问题,如何获取framebuffer的信息

对于ubuntu,可以安装fbset 进行查看

sudo apt-get install fbset

安装完毕后,运行

sudo fbset -i

可以查看framebuffer的信息,默认是/dev/fb0

在我的笔记本上输出是的

mode "1366x768"
    geometry 1366 768 1366 768 32
    timings 0 0 0 0 0 0 0
    accel true
    rgba 8/16,8/8,8/0,0/0
endmode

Frame buffer device information:
    Name        : inteldrmfb
    Address     : 0xc0000000
    Size        : 4227072
    Type        : PACKED PIXELS
    Visual      : TRUECOLOR
    XPanStep    : 1
    YPanStep    : 1
    YWrapStep   : 0
    LineLength  : 5504
    Accelerator : No

可以看出屏幕是1366x768,但这里有个地方要注意,看这个参数,LineLength : 5504,一个像素点用四个字节表示的话,5505/4=1376,所以屏幕是1366x768,但实际上framebuffer的大小为1376x768。最开始这个没注意,显示的图片就乱了,搞半天才发现。

至于颜色,这里写的是 rgba 8/16,8/8,8/0,0/0 ,但实际测试的颜色顺序为bgra,暂时不知道为什么,不过这个试试就能知道实际的顺序。

第二个问题,如何调整图片

简单讲,就是扣出像素信息,并调整好RGBA的顺序,当然还要注意framebuffer跟图片大小不同时,要补0或截断。

用C写就比较麻烦,要知道图片编码格式的细节,网上有不少文章和代码,之前就是为了显示图片才了解了framebuffer,看这篇文章,后来弄了个python版本,有库就是好,没几行代码就搞完了,到github搜了下,似乎没有类似的工具,于是干脆完善下,代码已经上传到github,https://github.com/zqb-all/convertfb,第一次开源好吧,求star

要先安装PIL

sudo apt-get install python-imaging

目前提供了五个参数,

-i 输入图片

-o 输出文件

-bw Framebuffer的宽度

-bh Framebuffer的高度

-f 格式,也就是‘R’'G''B''A'四个字母,组合成三个字母的字符串或四个字母的字符串,按照实际来,也就是RGB,BGR,ARGB,BGRA等等都行

举个例子,对于我的笔记本,可以这么用,准备好一张图片,假设叫zqb-all.bmp

./convertfb -i zqb-all.bmp -o zqb-all.fb -bw 1376 -bh 768 -f BGRA

生成zqb-all.fb,然后直接丢进去即可

sudo cat zqb-all.fb > /dev/fb0

什么,看不到,当然看不到,要切换到终端1去看

按住Ctrl + Alt + F1

输入用户名和密码登陆,重新执行刚刚的cat操作,即可。

本文地址:http://www.cnblogs.com/zqb-all/p/6107905.html

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏实战docker

免费申请和使用IntelliJ IDEA商业版License指南

IntelliJ IDEA是广受Java开发者喜爱的工具,其商业版的价格十分昂贵,如下图:

99010
来自专栏五分钟学算法

我在 GitHub 上看到了一个丧心病狂的开源项目!

但实际情况是,尽管许多人在写作这条道路都做出了尝试,可最终坚持下来的只有极少部分人。在这当中,导致他们放弃或停止写作的最大一个原因就是:拖延症。

12520
来自专栏大龄程序员的人工智能之路

Github上的5个高赞机器学习项目

对于程序员而言,Github无疑是一个巨大的宝库,其全球注册用户超过3100万,仓库数量突破一个亿。(2018年年底统计数据)

7310
来自专栏机器学习算法与Python学习

【实用】Github 超过 3 万 Star 的『超实用技术面试手册』

简历怎么写才能吸引HR的眼光,可能会被技术老大问到哪些常见问题,拿到Offer之后怎样才能让自己的优势最大化然后优中选优?

11320
来自专栏python前行者

python3 使用newspaper库提取新闻内容(readability,jparser)

注:Newspaper框架并不适用于实际工程类新闻信息爬取工作,框架不稳定,爬取过程中会有各种bug,例如获取不到url、新闻信息等,但对于想获取一些新闻语料的...

38650
来自专栏IT大咖说

月下载量 300 万的开源库,为 2000 美元植入安装广告,值吗?

JavaScript Standard Style 是一个月下载量超过 300 万的流行 JS 库,该项目在 GitHub 上拥有接近 2.2 万 Star。它...

11430
来自专栏地方网络工作室的专栏

一段自动编译前端项目的Shell代码,如果没有上集成工具的话,略有小用。

临时构建一个前端项目的服务器,由于前端项目有十几个,每次git拉代码以及运行编译命令,搞得烦不胜烦。关键是,全是命令行操作,让其他人不太愿意操作。因此,写了这样...

9730
来自专栏陌无崖知识分享

如何在linux搭建go和docker基本开发环境

网络配置的配置文件在/etc/sysconfig/network-scripts/下,文件名前缀为ifcfg-后面跟的就是网卡的名称,可以通过双TAB键查看然后...

27220
来自专栏大白技术控的技术自留地

Windows新终端中玩转ASCII和Emoji游戏的正确姿势

mbcrump/pongemojihttps://github.com/mbcrump/pongemoji

9030
来自专栏计算机视觉life

​综述 | SLAM回环检测方法

在视觉SLAM问题中,位姿的估计往往是一个递推的过程,即由上一帧位姿解算当前帧位姿,因此其中的误差便这样一帧一帧的传递下去,也就是我们所说的累积误差。一个消...

34630

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励