Android gsnap.c 截屏软件使用和真机实际使用的一些说明

gsnap.c是一款通过读取/dev/graphics/fb0设备内容进行截图的工具,但在某些真机上出现花屏、模糊、图片变形。问题源于屏幕实际大小与程序读取的分辨率不匹配,导致数据丢失。通过计算得出真实xres值为544,调整程序参数_width为544,解决了图像异常问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

gsnap 相关源代码下载  https://github.com/wendal/gsnap/blob/master/jni/gsnap.c


程序大致完成的工作是.

通过读取/dev/graphics/fb0 设备的内容

进行图片压缩.生成一个jpg图片

使用socket通信获取图片,或进行相关的缩小比例,清晰度等.

使用该程序进行再虚拟机上进行截屏,没出现问题

但是使用该程序对一些真机进行操作,就出现了花屏,模糊,图片变形严重的问题.

该问题的原因分析如下:

/dev/graphics/fb0 一般存储多帧图像数据.

gsnap通过读取数据.做相应的压缩生成一个jpg图片

fb->bits = mmap(0, fb_size(fb), PROT_READ | PROT_WRITE, MAP_SHARED, fb->fd, 0);

实际的屏幕大小与通过vi.xres,vi.yres读取的会有一些偏差.

例如:

 cat /dev/graphices/fb0>tmp1  抓取数据到tmp1

看tmp1的大小是 4177920

通过程序获得的vi.xres 540  vi.yres 960

按照获取的数据 4177920/540 不能进行整除.

因此按照这个尺寸进行的数据抓取造成了数据丢失,因此会出现花屏,模糊,图片变形严重的问题.

4177920/960 = 4352

4352/8 = 544

因此,真实的xres值应该是544.

通过参数的调整,设置_width 为544 解决了图片异常问题.

#define fb_width(fb) ( _wi
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值