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