要在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