嵌入式 Linux 系统如何实现截屏功能?详细步骤与原理介绍

wufei123 2024-06-04 阅读:13 评论:0
在桌面级操作系统中,下载一个截图软件能够实现截屏操作,但在嵌入式Linux系统中linux 下载工具,要实现小小的截图功能却没有这么简单。本文为您介绍嵌入式Linux系统中实现截屏功能的方式和步骤。 1.原理 因为Linux系统的Frame...

在桌面级操作系统中,下载一个截图软件能够实现截屏操作,但在嵌入式Linux系统中linux 下载工具,要实现小小的截图功能却没有这么简单。本文为您介绍嵌入式Linux系统中实现截屏功能的方式和步骤。

1.原理

因为Linux系统的FrameBuffer机制,会把屏幕上的每位点映射成一段线性显存空间,程序就可以通过改变这段显存的值来改变屏幕上某一点的颜色。屏幕色调的原始数据保存在/dev/fb0文件内,因而我们可以直接cat/dev/fb0>fb.raw读取该文件获得数据。

3d35ea19b197de14a33211a1bc406eca.png

图1原始截屏数据

其实,这些原始数据难以通过简单的工具直接查看,非常是在精简的嵌入式Linux系统上。为此,我们找到了一个不错的工具——gsnap。这个工具可以将framebuffer中的数据直接保存为png或则jpeg格式的图片。其实,我们须要获得该工具的源码,但是在交叉编译后移植它。

2.原材料

本次尝试笔者选择周立功/致远电子开源开发套件EasyARM-i.MX283A3,宿主机选用Ubuntu14.04。首先,我们须要获取gsnap源码,该源码可在网路中搜索下载。源码解压后得到的文件如图2:

图2gsnap源码

其中gsnap.c为解析算法,感兴趣的读者可以打开研究linux截屏软件,本文我们不做剖析。我们直接打开跟编译相关的Makefile文件,内容如下。从右图可知,该源码依赖libpng、libjpeg、zlib、libmath四种库。因为交叉编译器的库种包含有libmath,因而我们须要打算好另外三种库备用。

软件截屏限制怎么破解_linux截屏软件_软件截屏快捷键

dc0ac023ed1808531bb2060e7bf0467e.png

图3gsnap的Makefile

解压后得到的文件如图4。(源码包可从库官网或峰会下载)

aa5c1b605f4f4a6f98dac8306225ea12.png

图4库的源码包解压

软件截屏快捷键_软件截屏限制怎么破解_linux截屏软件

3.交叉编译

第一步,交叉编译libjpeg。步入到源码目录,执行./configure--host=arm-linux--prefix=/home/vmuser/gsnap/jpeg_install/,之后执行make、makeinstall,在安装目录/home/vmuser/gsnap/jpeg_install/得到交叉编译过的库。

288b6392753aa1c56e9690f99893a1f2.png

图5交叉编译libjpeg

第二步,交叉编译zlib。因为zlib是libpng的依赖,因而必须首先编译zlib。因为zlib中的configure并未提供--host参数,因而须要为它自动指明交叉编译器:exportCC=arm-fsl-linux-gnueabi-gcc,之后执行./configure--

linux截屏软件_软件截屏限制怎么破解_软件截屏快捷键

prefix=/home/vmuser/gsnap/z_install/,make、makeinstall。得到的文件类同第一步,不再放图。

第三步,交叉编译libpng。与上述两步骤又不同,libpng中提供有Linux平台下的Makefile类库linux截屏软件,我们可以直接用来更改使用。步入到libpng的源码目录,执行拷贝cpscripts/makefile.linuxMakefile,之后打开Makefile更改,如图6。更改的内容为交叉编译器名称和依赖的zlib的路径。最后make、makeinstall得到头文件可库文件。

1368b214259854dd8f52ef4b49dfa9dd.png

图6更改libpng的Makefile

第四步,交叉编译gsnap。为便捷起见,我们将上述得到的库文件和头文件分别集中拷贝到自行构建的lib和includes目录下,但是更改gsnap的Makefile。执行make后才能得到可执行文件gsnap。

软件截屏快捷键_linux截屏软件_软件截屏限制怎么破解

6a1c6994006878aec886ba9e6e3bbd38.png

图7更改gsnap的Makefile

4.验证

将得到的gsnap可执行文件拷贝到目标板的/opt目录下,执行截屏命令:./gsnapfb.jpg/dev/fb0linux软件,将得到的截屏fb.jpg拷贝到ubuntu中可得图8。

56fbb58a452bc37acce671331a27fc36.png

图8截屏得到的图片

以上就是嵌入式 Linux 系统如何实现截屏功能?详细步骤与原理介绍的详细内容,更多请关注知识资源分享宝库其它相关文章!

版权声明

本站内容来源于互联网搬运,
仅限用于小范围内传播学习,请在下载后24小时内删除,
如果有侵权内容、不妥之处,请第一时间联系我们删除。敬请谅解!
E-mail:dpw1001@163.com

分享:

扫一扫在手机阅读、分享本文

发表评论
热门文章
  • 华为 Mate 70 性能重回第一梯队 iPhone 16 最后一块遮羞布被掀

    华为 Mate 70 性能重回第一梯队 iPhone 16 最后一块遮羞布被掀
    华为 mate 70 或将首发麒麟新款处理器,并将此前有博主爆料其性能跑分将突破110万,这意味着 mate 70 性能将重新夺回第一梯队。也因此,苹果 iphone 16 唯一能有一战之力的性能,也要被 mate 70 拉近不少了。 据悉,华为 Mate 70 性能会大幅提升,并且销量相比 Mate 60 预计增长40% - 50%,且备货充足。如果 iPhone 16 发售日期与 Mate 70 重合,销量很可能被瞬间抢购。 不过,iPhone 16 还有一个阵地暂时难...
  • 酷凛 ID-COOLING 推出霜界 240/360 一体水冷散热器,239/279 元

    酷凛 ID-COOLING 推出霜界 240/360 一体水冷散热器,239/279 元
    本站 5 月 16 日消息,酷凛 id-cooling 近日推出霜界 240/360 一体式水冷散热器,采用黑色无光低调设计,分别定价 239/279 元。 本站整理霜界 240/360 散热器规格如下: 酷凛宣称这两款水冷散热器搭载“自研新 V7 水泵”,采用三相六极马达和改进的铜底方案,缩短了水流路径,相较上代水泵进一步提升解热能力。 霜界 240/360 散热器的水泵为定速 2800 RPM 设计,噪声 28db (A)。 两款一体式水冷散热器采用 27mm 厚冷排,...
  • 惠普新款战 99 笔记本 5 月 20 日开售:酷睿 Ultra / 锐龙 8040,4999 元起

    惠普新款战 99 笔记本 5 月 20 日开售:酷睿 Ultra / 锐龙 8040,4999 元起
    本站 5 月 14 日消息,继上线官网后,新款惠普战 99 商用笔记本现已上架,搭载酷睿 ultra / 锐龙 8040处理器,最高可选英伟达rtx 3000 ada 独立显卡,售价 4999 元起。 战 99 锐龙版 R7-8845HS / 16GB / 1TB:4999 元 R7-8845HS / 32GB / 1TB:5299 元 R7-8845HS / RTX 4050 / 32GB / 1TB:7299 元 R7 Pro-8845HS / RTX 2000 Ada...
  • python中def什么意思

    python中def什么意思
    python 中,def 关键字用于定义函数,这些函数是代码块,执行特定任务。函数语法为 def (参数列表)。函数可以通过其名字和圆括号调用。函数可以接受参数作为输入,并在函数体中使用参数名访问。函数可以使用 return 语句返回一个值,它将成为函数调用的结果。 Python 中 def 关键字 在 Python 中,def 关键字用于定义函数。函数是代码块,旨在执行特定任务。 语法 def 函数定义的语法如下: def (参数列表): # 函数体 示例 定义...
  • python中int函数的用法

    python中int函数的用法
    int() 函数将值转换为整数,支持多种类型(字符串、字节、浮点数),默认进制为 10。可以指定进制数范围在 2-36。int() 返回 int 类型的转换结果,丢弃小数点。例如,将字符串 "42" 转换为整数为 42,将浮点数 3.14 转换为整数为 3。 Python 中的 int() 函数 int() 函数用于将各种类型的值转换为整数。它接受任何可以解释为整数的值作为输入,包括字符串、字节、浮点数和十六进制表示。 用法 int(object, base=10) 其中...