姓名:閔聿寬
學(xué)號(hào):16020188028
轉(zhuǎn)自:http://www.eeworld.com.cn/qrs/2018/ic-news110151973.html
【嵌牛導(dǎo)讀】Linux是我們嵌入式學(xué)習(xí)中的常用系統(tǒng),下面介紹了Linux中一種截屏的方法
【嵌牛鼻子】截屏技術(shù)
【嵌牛提問(wèn)】Linux中如何截屏昵仅?
【嵌牛正文】
在桌面級(jí)操作系統(tǒng)中缓熟,下載一個(gè)截圖軟件就能實(shí)現(xiàn)截屏操作,但在嵌入式Linux系統(tǒng)中摔笤,要實(shí)現(xiàn)小小的截圖功能卻沒(méi)有那么簡(jiǎn)單够滑。本文為您介紹嵌入式Linux系統(tǒng)中實(shí)現(xiàn)截屏功能的方法和步驟。
1 . 原理
由于 Linux 系統(tǒng)的 FrameBuffer 機(jī)制吕世,會(huì)把屏幕上的每個(gè)點(diǎn)映射成一段線性內(nèi)存空間彰触,程序就可以通過(guò)改變這段內(nèi)存的值來(lái)改變屏幕上某一點(diǎn)的顏色。屏幕色彩的原始數(shù)據(jù)保存在/dev/fb0文件內(nèi)命辖,因此我們可以直接cat /dev/fb0 > fb.raw讀取該文件獲得數(shù)據(jù)况毅。
?圖1? 原始截屏數(shù)據(jù)
顯然,這種原始數(shù)據(jù)無(wú)法通過(guò)簡(jiǎn)單的工具直接查看尔艇,特別是在精簡(jiǎn)的嵌入式Linux系統(tǒng)上尔许。因此,我們找到了一個(gè)不錯(cuò)的工具——gsnap终娃。這個(gè)工具可以將framebuffer中的數(shù)據(jù)直接保存為png或者jpeg格式的圖片味廊。當(dāng)然,我們需要獲得該工具的源碼,并且在交叉編譯后移植它毡们。
2 . 原材料
本次嘗試筆者選擇周立功/致遠(yuǎn)電子開(kāi)源開(kāi)發(fā)套件EasyARM-i.MX283A3迅皇,宿主機(jī)選用Ubuntu14.04。首先衙熔,我們需要獲取gsnap源碼,該源碼可在網(wǎng)絡(luò)中搜索下載搅荞。源碼解壓后得到的文件如圖2:
?圖2? gsnap源碼
其中g(shù)snap.c為解析算法红氯,感興趣的讀者可以打開(kāi)研究,本文我們不做分析咕痛。我們直接打開(kāi)跟編譯相關(guān)的Makefile文件痢甘,內(nèi)容如下。從下圖可知茉贡,該源碼依賴libpng塞栅、libjpeg、zlib腔丧、libmath四種庫(kù)放椰。由于交叉編譯器的庫(kù)種包含有l(wèi)ibmath,因此我們需要準(zhǔn)備好另外三種庫(kù)備用愉粤。
?圖3? gsnap的Makefile
解壓后得到的文件如圖4砾医。(源碼包可從庫(kù)官網(wǎng)或論壇下載)
圖4? 庫(kù)的源碼包解壓
3 . 交叉編譯
第一步,交叉編譯libjpeg衣厘。進(jìn)入到源碼目錄如蚜,執(zhí)行./configure --host=arm-linux --prefix=/home/vmuser/gsnap/jpeg_install/,然后執(zhí)行make影暴、make install 错邦,在安裝目錄/home/vmuser/gsnap/jpeg_install/得到交叉編譯過(guò)的庫(kù)。
?圖5? 交叉編譯libjpeg
第二步型宙,交叉編譯zlib撬呢。由于zlib是libpng的依賴,因此必須首先編譯zlib早歇。由于zlib中的configure并未提供--host參數(shù)倾芝,因此需要為它手動(dòng)指明交叉編譯器:export CC=arm-fsl-linux-gnueabi-gcc,然后執(zhí)行./configure --prefix=/home/vmuser/gsnap/z_install/箭跳,make晨另、make install 。得到的文件類(lèi)同第一步谱姓,不再放圖借尿。
第三步,交叉編譯libpng。與上述兩步驟又不同路翻,libpng中提供有Linux平臺(tái)下的Makefile例程狈癞,我們可以直接拿來(lái)修改使用。進(jìn)入到libpng的源碼目錄茂契,執(zhí)行拷貝cp scripts/makefile.linux Makefile蝶桶,然后打開(kāi)Makefile修改,如圖6掉冶。修改的內(nèi)容為交叉編譯器名稱和依賴的zlib的路徑真竖。最后make、makeinstall得到頭文件可庫(kù)文件厌小。
?圖6? 修改libpng的Makefile
第四步恢共,交叉編譯gsnap。為方便起見(jiàn)璧亚,我們將上述得到的庫(kù)文件和頭文件分別集中拷貝到自行建立的lib和includes目錄下讨韭,并且修改gsnap的Makefile。執(zhí)行make后就能得到可執(zhí)行文件gsnap癣蟋。
?圖7? 修改gsnap的Makefile
4 . 驗(yàn)證
?? 將得到的gsnap可執(zhí)行文件拷貝到目標(biāo)板的/opt目錄下透硝,執(zhí)行截屏命令:./gsnap? fb.jpg? /dev/fb0,將得到的截屏fb.jpg拷貝到ubuntu中可得圖8梢薪。
?圖8? 截屏得到的圖片