python将图片转换为Framebuffer裸数据格式(终端显示图片)【转】
转自:https://www.cnblogs.com/zqb-all/p/6107905.html
要在ubuntu终端显示图片或者在板子的LCD显示图片,Framebuffer是一个简单易用的接口,直接写入像素信息即可。
但普通的图片带有头部信息或者编码格式不同,直接送入Framebuffer是显示不出来的,需要扣出像素信息,并按照Framebuffer的RGBA顺序调整好,才能显示。所以现在的问题就是,如何获取framebuffer的信息,以及如何调整图片。
第一个问题,如何获取framebuffer的信息
对于ubuntu,可以安装fbset 进行查看
sudo apt-get install fbset
安装完毕后,运行
|
1
|
sudo fbset -i |
可以查看framebuffer的信息,默认是/dev/fb0
在我的笔记本上输出是的
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
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/0endmodeFrame 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
|
1
|
sudo apt-get install python-imaging |
目前提供了五个参数,
-i 输入图片
-o 输出文件
-bw Framebuffer的宽度
-bh Framebuffer的高度
-f 格式,也就是‘R’'G''B''A'四个字母,组合成三个字母的字符串或四个字母的字符串,按照实际来,也就是RGB,BGR,ARGB,BGRA等等都行
举个例子,对于我的笔记本,可以这么用,准备好一张图片,假设叫zqb-all.bmp
|
1
|
./convertfb -i zqb-all.bmp -o zqb-all.fb -bw 1376 -bh 768 -f BGRA |
生成zqb-all.fb,然后直接丢进去即可
|
1
|
sudo cat zqb-all.fb > /dev/fb0 |
什么,看不到,当然看不到,要切换到终端1去看
按住Ctrl + Alt + F1
输入用户名和密码登陆,重新执行刚刚的cat操作,即可。
本文地址:http://www.cnblogs.com/zqb-all/p/6107905.html
python将图片转换为Framebuffer裸数据格式(终端显示图片)【转】的更多相关文章
- python将图片转换为Framebuffer裸数据格式(终端显示图片)
要在ubuntu终端显示图片或者在板子的LCD显示图片,Framebuffer是一个简单易用的接口,直接写入像素信息即可. 但普通的图片带有头部信息或者编码格式不同,直接送入Framebuffer是显 ...
- IE浏览器中图片路径正确< img ... />标签不显示图片
如下图所示,下面的html要去加载上面的jpg图片: 代码如下: <img src="luzhanshi1.jpg" alt="图片加载失败"> 使 ...
- 利用framebuffer,命令行显示图片
上代码 import fcntl import struct import mmap import contextlib import os import time import numpy as n ...
- 用python简单处理图片(1):打开\显示\保存图像
一提到数字图像处理,可能大多数人就会想到matlab,但matlab也有自身的缺点: 1.不开源,价格贵 2.软件容量大.一般3G以上,高版本甚至达5G以上. 3.只能做研究,不易转化成软件. 因此, ...
- [Android] 给图像加入相框、圆形圆角显示图片、图像合成知识
前一篇文章讲述了Android触屏setOnTouchListener实现突破缩放.移动.绘制和加入水印,继续我的"随手拍"项目完毕给图片加入相框.圆形圆角显示图片和图像合 ...
- django上传并显示图片
环境 python 3.5 django 1.10.6 步骤 创建名为 testupload的项目 django-admin startproject testupload 在项目testupload ...
- IOS开发-UI学习-根据URL显示图片,下载图片的练习(button,textfield,image view,url,data)
编写一个如下界面,实现: 1.在文本输入框中输入一个网址,然后点击显示图片,图片显示到UIImageView中. 2.点击下载,这张显示的图片被下载到手机的Documents文件夹下的Dowmload ...
- wpf图片浏览器,实现缩放平移操作图片切换等功能
wpf经常要用到控件来查看图片,尤其是高清图片,于是做了一个例子: 1.定义图片的队列,用list来存. private readonly List<string> files; 2.切换 ...
- jquery 显示图片
<!DOCTYPE html><html><head><meta http-equiv="Content-Type" content=&q ...
随机推荐
- 自学Aruba4.1-Aruba开机初始化
点击返回:自学Aruba之路 自学Aruba4.1-Aruba开机初始化 无线控制器刚启动的时候,是没有任何配置的,需要进行初始化配置才能进行管理. 通过无线控制器的console端口连接无线控制器, ...
- 如何同时修改SharePoint帐号和AD帐号的密码 - 批量修改SharePoint Managed Account
cls if ((Get-PSSnapin "Microsoft.SharePoint.PowerShell" -ErrorAction SilentlyContinue) -eq ...
- pyinstaller模块使用
目前pip install pyinstaller已经成熟 但是还是有一些坑,郁闷了好久,记一下注意点吧. 将py脚本打包成exe文件时,如果导入了非python自带库,则需要将导入的库从site-p ...
- CPP相关的常见错误(更新ing)
01.只允许在C99模式下使用 for 循环初始化申明 解决:指定下即可 gcc -o xxx -std=c99 02.
- Luogu 1941 【NOIP2014】飞扬的小鸟 (动态规划)
Luogu 1941 [NOIP2014]飞扬的小鸟 (动态规划) Description Flappy Bird 是一款风靡一时的休闲手机游戏.玩家需要不断控制点击手机屏幕的频率来调节小鸟的飞行高度 ...
- 暑期OI大电影——不看后悔整个OI生涯!
惊爆~!! 2018暑期OI大电影要开始放送啦~!! 各位OI骨灰级大咖登场荧幕~!! 近四十部大电影纷至沓来~!! 著名特级导演CCF.著名特级编剧刘汝佳等纷纷给予高度评价~!! 观众朋友们,OI的 ...
- SNP (Single Nucleotide Polymorphism), SNV ( single nucleotide variants ) , Indel (insertion-deletion) 的区别
SNP (Single Nucleotide Polymorphism):强调在一个群体中具有一定频率的变异,一般为二态性.比如G→C SNV ( single nucleotide variants ...
- Top sort 双队列
#include<iostream> #include<vector> #include<queue> using namespace std; ]; int ma ...
- #define 多行多语句
#define DEBUG_ENABLE 1 #if DEBUG_ENABLE > 0 #define DEBUG_PORT UART_PORT2 #define DBG_BUF_LEN 512 ...
- LVS管理工具ipvsadm详解与LVS-NAT模式演示
ipvsadm命令是工作在用户空间的LVS集群管理工具,原理是调用ipvs的API,在内核中生成ipvs的规则,主要用来管理集群服务和集群服务中的RealServer,使用方法类似iptables命令 ...