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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM