使用 MediaProjection API 进行屏幕捕获,我创建了一个 ImageReader 并将其用作捕获屏幕的访问点,如下所示:
mImageReader = ImageReader.newInstance(mWidth, mHeight, ImageFormat.JPEG, 2);
和
mImageReader.setOnImageAvailableListener(new ImageReader.OnImageAvailableListener() {
@Override
public void onImageAvailable(ImageReader reader) {
Image image = null;
Bitmap bitmap = null;
image = mImageReader.acquireLatestImage();
Image.Plane[] planes = image.getPlanes();
Buffer buffer = planes[0].getBuffer().rewind();
bitmap = Bitmap.createBitmap(mWidth, mHeight, Bitmap.Config.ARGB_8888);
bitmap.copyPixelsFromBuffer(buffer);
}
});
但是生成的图像始终是空白透明图像,并且生成的位图中的所有像素都设置为 #00000000 :(
我已经坚持了一段时间,真的可以使用一些帮助,所以欢迎任何建议。(而且我已经尝试过这些帖子,但结果都是一样的——这个、这个和这个)
编辑:我在这一行通过图像阅读器表面:
DisplayMetrics metrics = getResources().getDisplayMetrics();
int density = metrics.densityDpi;
int flags = DisplayManager.VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR | DisplayManager.VIRTUAL_DISPLAY_FLAG_PUBLIC;
Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
mWidth = size.x;
mHeight = size.y;
mMediaProjection.createVirtualDisplay("screencap", mWidth, mHeight, density, flags, mImageReader.getSurface(), null, mHandler);