尝试捕获屏幕时,ImageReader的位图始终为空

时间:2015-07-28 21:17:13

标签: android bitmap android-image bytebuffer android-mediaprojection

使用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 :(

我已经坚持了一段时间并且可以真正使用一些帮助,所以欢迎任何建议。 (此外,我已经尝试过这些帖子,但结果却相同 - thisthisthis

编辑: 我在这一行中传递了图像阅读器表面:

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);

0 个答案:

没有答案