zoukankan      html  css  js  c++  java
  • 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/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

    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

  • 相关阅读:
    [数据库]Oracle数据迁移至HIVE(待续)
    [Java EE]解决浏览器跨域问题
    [Linux]Xmanager+Xshell远程管理桌面版CentOS物理服务器的桌面版CentOS虚拟机
    JAVA生成随机数工具类RandomStringUtils详解
    electron 安装不同的版本的方法
    Git 常用操作(一)
    openresty 简单入门
    Ubuntu 分辨率设置
    javascript尾调用与尾递归
    深入理解 JavaScript 执行上下文和执行栈
  • 原文地址:https://www.cnblogs.com/sky-heaven/p/9662608.html
Copyright © 2011-2022 走看看