<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何在嵌入式Linux中截屏

AGk5_ZLG_zhiyua ? 來源:未知 ? 作者:胡薇 ? 2018-11-01 16:10 ? 次閱讀

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

一、原理

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

圖1 原始截屏數據

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

二、 原材料

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

圖2 gsnap源碼

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

圖3 gsnap的Makefile

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

圖4 庫的源碼包解壓

三、交叉編譯

第一步,交叉編譯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

四、驗證

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

圖8 截屏得到的圖片

至此,gsnap的編譯與移植工作結束。各位小伙伴若在嵌入式Linux開發中遇到問題,歡迎與ZLG電子工程師交流。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 嵌入式
    +關注

    關注

    5001

    文章

    18414

    瀏覽量

    291491
  • Linux
    +關注

    關注

    87

    文章

    11022

    瀏覽量

    207046

原文標題:【教程】嵌入式Linux中如何進行截屏?

文章出處:【微信號:ZLG_zhiyuan,微信公眾號:ZLG致遠電子】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    嵌入式Linux-Qt環境搭建 Qt程序運行測試

    本編介紹如何在嵌入式Linux開發板上配置Qt運行環境,并進行Qt程序運行測試。
    的頭像 發表于 06-01 09:07 ?6818次閱讀
    <b class='flag-5'>嵌入式</b><b class='flag-5'>Linux</b>-Qt環境搭建 Qt程序運行測試

    何在嵌入式Linux開發板上配置Qt運行環境

    本文基于I.MX6ULL芯片的Linux開發板,介紹如何在嵌入式Linux開發板上配置Qt運行環境,并運行Qt程序進行測試
    發表于 10-10 09:56 ?2348次閱讀

    何在嵌入式Linux下發郵件

    有誰知道如何在嵌入式Linux下發郵件?用的2440開發板...
    發表于 05-08 10:18

    何在嵌入式Linux中進行?

    在桌面級操作系統,下載一個截圖軟件就能實現操作,但在嵌入式Linux系統,要實現小小的截
    發表于 10-25 06:13

    Linux使用小技巧:嵌入式Linux系統實現功能的方法和步驟

    在桌面級操作系統,下載一個截圖軟件就能實現操作,但在嵌入式Linux系統,要實現小小的截
    發表于 05-03 07:00

    嵌入式Linux如何進行?

    在桌面級操作系統,下載一個截圖軟件就能實現操作,但在嵌入式Linux系統,要實現小小的截
    發表于 08-09 00:30

    何在嵌入式操作系統ARM Linux實現ZLG7290的驅動?

    I2C總線接口的工作模式和特點如何在嵌入式操作系統ARM Linux實現ZLG7290的驅動?I2C總線在傳送數據過程中有哪幾種信號?
    發表于 04-23 06:00

    WIFI網卡如何在嵌入式Linux

    僅用于增加百度收錄權重,排版未優化,日常不維護。請訪問: 查看、評論。本博文對應地址: 嵌入式Linux——WIFI網卡/#more如何在嵌入式Li
    發表于 11-04 08:26

    嵌入式Linux開發板工具gsnap移植PC機

    嵌入式Linux開發板工具gsnap移植PC機:ubuntu16.04.2 LTS開發板:i.MX6UL交叉編譯器:arm-linux-
    發表于 11-04 07:27

    基于嵌入式linux開發板的貪吃蛇游戲運行

    何在嵌入式linux開發板上運行貪吃蛇游戲呢?本文以EasyARM-i.MX283A為硬件載體,簡述其運行貪吃蛇小游戲的方法及步驟。
    的頭像 發表于 09-23 14:08 ?9350次閱讀

    何在嵌入式Linux中使用GPIO

    了解如何在嵌入式Linux中使用GPIO,特別強調Zynq-7000系列。 我們介紹了基本的用戶和內核空間GPIO使用情況,以及GPIO,GPIO密鑰和GPIO LED上的bit-banged I / O.
    的頭像 發表于 11-26 07:02 ?3888次閱讀

    嵌入式Linux——WIFI網卡

    ——WIFI網卡/#more如何在嵌入式Linux中,使用WIFI無線網卡。嵌入式中設備想要聯網,無非就 有線和無線 兩種方式。有線就插上網線,沒什么好說的;無線的話一種是將WIFI模
    發表于 11-01 16:57 ?8次下載
    <b class='flag-5'>嵌入式</b><b class='flag-5'>Linux</b>——WIFI網卡

    手把手之如何在嵌入式Linux上運行QT應用程序(以百問網imx6ull開發板為例)

    昨天寫了一篇Buildroot構建的文章,等待了幾個小時,終于編譯完了:Buildroot系統構建學習筆記(以百問網imx6ull開發板為例)我們將emmc下載到開發板上即可:這個QT程序...
    發表于 11-02 10:36 ?15次下載
    手把手之如<b class='flag-5'>何在</b><b class='flag-5'>嵌入式</b><b class='flag-5'>Linux</b>上運行QT應用程序(以百問網imx6ull開發板為例)

    【技術分享】如何在嵌入式Linux平臺上使用Nginx搭建RTMP流媒體服務器?

    RTMP作為目前主流的流媒體傳輸協議,廣泛應用于音視頻領域。那么我們如何快速在嵌入式板子上搭建起自己的rtmp流媒體服務器?本篇文章將帶大家實踐一下。 ?? 概述 Nginx是一個以高效穩定著稱
    的頭像 發表于 01-05 15:15 ?451次閱讀

    【技術分享】如何在嵌入式Linux平臺上使用Nginx搭建RTMP流媒體服務器?

    RTMP作為目前主流的流媒體傳輸協議,廣泛應用于音視頻領域。那么我們如何快速在嵌入式板子上搭建起自己的rtmp流媒體服務器?本篇文章將帶大家實踐一下。概述Nginx是一個以高效穩定著稱的高性能
    的頭像 發表于 01-13 09:27 ?783次閱讀
    【技術分享】如<b class='flag-5'>何在</b><b class='flag-5'>嵌入式</b><b class='flag-5'>Linux</b>平臺上使用Nginx搭建RTMP流媒體服務器?
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>