新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 嵌入式Linux中如何進行截屏?

        嵌入式Linux中如何進行截屏?

        作者:ZLG致遠電子 時間:2018-11-01 來源:電子產品世界 收藏

          在桌面級操作系統中,下載一個截圖軟件就能實現截屏操作,但在系統中,要實現小小的截圖功能卻沒有那么簡單。本文為您介紹系統中實現截屏功能的方法和步驟。

        本文引用地址:http://www.104case.com/article/201811/393735.htm

          1 . 原理

          由于 Linux 系統的 FrameBuffer 機制,會把屏幕上的每個點映射成一段線性內存空間,程序就可以通過改變這段內存的值來改變屏幕上某一點的顏色。屏幕色彩的原始數據保存在/dev/fb0文件內,因此我們可以直接cat /dev/fb0 > fb.raw讀取該文件獲得數據。

          圖1 原始截屏數據

          顯然,這種原始數據無法通過簡單的工具直接查看,特別是在精簡的系統上。因此,我們找到了一個不錯的工具——gsnap。這個工具可以將framebuffer中的數據直接保存為png或者jpeg格式的圖片。當然,我們需要獲得該工具的源碼,并且在交叉編譯后移植它。

          2 . 原材料

          本次嘗試筆者選擇周立功/致遠電子開源開發套件EasyARM-i.MX283A3,宿主機選用Ubuntu14.04。首先,我們需要獲取gsnap源碼,該源碼可在網絡中搜索下載。源碼解壓后得到的文件如圖2:

          圖2 gsnap源碼

          其中gsnap.c為解析算法,感興趣的讀者可以打開研究,本文我們不做分析。我們直接打開跟編譯相關的Makefile文件,內容如下。從下圖可知,該源碼依賴libpng、libjpeg、zlib、libmath四種庫。由于交叉編譯器的庫種包含有libmath,因此我們需要準備好另外三種庫備用。

          圖3 gsnap的Makefile

          解壓后得到的文件如圖4。(源碼包可從庫官網或論壇下載)

          圖4 庫的源碼包解壓

          3 . 交叉編譯

          第一步,交叉編譯libjpeg。進入到源碼目錄,執行./configure --host=arm-linux --prefix=/home/vmuser/gsnap/jpeg_install/,然后執行make、make install ,在安裝目錄/home/vmuser/gsnap/jpeg_install/得到交叉編譯過的庫。

          圖5 交叉編譯libjpeg

          第二步,交叉編譯zlib。由于zlib是libpng的依賴,因此必須首先編譯zlib。由于zlib中的configure并未提供--host參數,因此需要為它手動指明交叉編譯器:export CC=arm-fsl-linux-gnueabi-gcc,然后執行./configure --

          prefix=/home/vmuser/gsnap/z_install/,make、make install 。得到的文件類同第一步,不再放圖。

          第三步,交叉編譯libpng。與上述兩步驟又不同,libpng中提供有Linux平臺下的Makefile例程,我們可以直接拿來修改使用。進入到libpng的源碼目錄,執行拷貝cp scripts/makefile.linux Makefile,然后打開Makefile修改,如圖6。修改的內容為交叉編譯器名稱和依賴的zlib的路徑。最后make、makeinstall得到頭文件可庫文件。

          圖6 修改libpng的Makefile

          第四步,交叉編譯gsnap。為方便起見,我們將上述得到的庫文件和頭文件分別集中拷貝到自行建立的lib和includes目錄下,并且修改gsnap的Makefile。執行make后就能得到可執行文件gsnap。


          圖7 修改gsnap的Makefile

          4 . 驗證

          將得到的gsnap可執行文件拷貝到目標板的/opt目錄下,執行截屏命令:./gsnap fb.jpg /dev/fb0,將得到的截屏fb.jpg拷貝到ubuntu中可得圖8。

          圖8 截屏得到的圖片



        關鍵詞: 嵌入式Linux

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 石景山区| 莒南县| 兴隆县| 惠安县| 永安市| 淮安市| 凌云县| 庆元县| 太白县| 潞城市| 桂林市| 周至县| 贵阳市| 黄大仙区| 永吉县| 朝阳市| 虹口区| 遂平县| 灌南县| 双鸭山市| 南康市| 灵石县| 安平县| 西林县| 成安县| 海口市| 丰镇市| 会同县| 五台县| 雷州市| 信阳市| 上栗县| 仁怀市| 普定县| 高平市| 双牌县| 文昌市| 淮阳县| 平顺县| 光山县| 孟州市|