-
Notifications
You must be signed in to change notification settings - Fork 22
Xamarin.Amndroid 全局截图
L edited this page Jan 20, 2020
·
4 revisions
全局截图=app外也可以截图,需要授权
关键词:Media Projection API
官方示例Xamarin.Android - ScreenCapture
大致流程是
检查权限
没有权限就申请
callback确认权限申请结果,如果通过,则进行截图
有权限直接截图
ImageReader mImageReader = ImageReader.NewInstance(width, height, ImageFormatType.Jpeg, 1);
virtualDisplay = mediaProjection.CreateVirtualDisplay("ScreenCapture",
width, height, screenDensity,
(DisplayFlags)VirtualDisplayFlags.AutoMirror, mImageReader.Surface, null, null);
Image image = mImageReader.AcquireLatestImage();
设置截图高宽时报错
RGBA override BLOB format buffer should have height == width
这里是说截图时高宽不一致->要求高宽一致
取高宽中的较大值为截图时的高宽,获得截图内容,就不会报错
即
var max= ScreenWidth > ScreenHeight ? ScreenWidth : ScreenHeight;
width = max;
height = max;
则此时,
如果是竖屏截图,实际宽<实际高,图片的左右两边会留黑(因为按照高X高的尺寸获得的截图)
如果是横屏截图,实际宽>实际高,图片的上下两边留黑
需要进行裁剪后使用
以1920X1080的手机举例
橙色框为实际截图内容,为一个1920X1920的图片
蓝色框为有效的截图部分
则X从粉色的点((1920-1080)/2)开始获取图片,获取之后宽度为1080的内容即可
Y则正常从0-1920获取
类似,不过是X正常0-1920
Y从((1920-1080)/2)开始获取图片,获取之后长度为1080的内容