高通8953平台横屏不能截屏的问题

一般android平台截屏主要使用:
录屏
adb shell screenrecord /sdcard/test01.mp4
adb pull /sdcard/test01.mp4
截屏
adb shell screencap -p /sdcard/screen.png
adb pull /sdcard/screen.png

# screencap -h
screencap -h
usage: screencap [-hp] [-d display-id] [FILENAME]
-h: this message
-p: save the file as a png.
-d: specify the display id to capture, default 0.
If FILENAME ends with .png it will be saved as a png.
If FILENAME is not given, the results will be printed to stdout.
用法: screencap [-hp] [-d 显示id] [文件名]
-h: 查看帮助信息
-p: 保存文件为png格式
-d: 指定截取的显示id,默认为fb0(fb为framebuffer)
如果文件名以.png结束,将保存为png格式文件
如果没有文件名,将直接打印到标准输出

1、截取fb0界面到sdcard(此路径可以随意设置),文件名为fb0.png

# screencap sdcard/fb0.png
# screencap -p /sdcard/fb0.png

2、截取fb1界面到sdcard,文件名为fb1.png

# screencap -d /dev/graphics/fb1 sdcard/fb1.png

2、在运行

adb root
adb remount
adb shell screencap -p /sdcard/fb0.png

发现截屏出来的图像是0字节的文件,说明截屏不成功,后来发现我们屏幕旋转了90度横屏,所以截屏程序screencap代码要修改,否则会提示:
SurfaceFlinger: size mismatch (1280, 320) < (320, 1280)
主要的原因是我们的屏物理分辨率是320x1280,如下配置:
在这里插入图片描述
而旋转90度横屏之后,分辨率变成1280, 320,截屏的时候就不成功,代码如下:

status_t result = screenshot.update(display, Rect(), 
            0 /* reqWidth */, 0 /* reqHeight */,      //这个如果不设置参数,那么获得的截屏参数物理屏的分辨率。
            INT32_MIN, INT32_MAX, /* all layers */	 
            false, captureOrientation)
所以这个函数必须设置横屏后wm size获取到的分辨率,如下:
 status_t result = screenshot.update(display, Rect(), 
            1280 /* reqWidth */, 320 /* reqHeight */,  //即屏物理的宽度和高度对调
            INT32_MIN, INT32_MAX, /* all layers */	 
            false, captureOrientation);
©️2020 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值