Растровое изображение из ImageReader всегда пусто при попытке захвата экрана

Используя 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);

0 ответов

Другие вопросы по тегам