• 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

  • 相关阅读:
    [蓝桥杯] 第39级台阶
    [蓝桥杯] 马虎的算式
    POJ 1142 Smith Numbers(史密斯数)
    HDU 1181 变形课
    HDU 1728 逃离迷宫
    HDU 2188 悼念512汶川大地震遇难同胞――选拔志愿者 巴什博奕
    HDU 2177 取(2堆)石子游戏 (威佐夫博弈)
    HDU 1847 Good Luck in CET-4 Everybody! 博弈
    HDU 1525 Euclid's Game
    HDU 1517 A Multiplication Game 博弈
  • 原文地址:https://www.cnblogs.com/zqb-all/p/6107905.html
Copyright © 2020-2023  润新知