1

我正在尝试使用服务截取我的 Android 设备(Samsung Galaxy Tab S5e)的屏幕截图。我正在使用这里的代码。

在链接的代码中,ImageReader.newInstance(mWidth, mHeight, PixelFormat.RGBA_8888, 2);使用了。注意PixelFormat.RGBA_8888. 现在,这将不允许我编译我的项目,我收到了错误:Error: Must be one of: ImageFormat.UNKNOWN, ImageFormat.RGB_565... etc.

所以我尝试更改PixelFormat.RGBA_8888ImageFormat.JPEG并编译。但是,我的应用程序现在崩溃并显示以下消息:

RGBA 覆盖 BLOB 格式缓冲区应具有高度 == 宽度

我尝试更改PixelFormat.RGBA_88880x4,0x1ImageFormat.RGB_565其他一些。这样做通常会导致消息异常:

生产者输出缓冲区格式 0x1 与 ImageReader 配置的缓冲区格式 0x4 不匹配。

这在某种程度上与中描述的格式相关联onImageAvailable(ImageReader reader)

我看过以下 SO 帖子,似乎正确的格式是特定于设备的,但我已经尝试了所有这些,错误是上述之一。

我完全不知所措(而且我是 Java/Android 新手),所以真的可以使用一些帮助。

4

1 回答 1

2

如下创建图像阅读器,

 ImageReader imageReader =ImageReader.newInstance(width,
            height,
            PixelFormat.RGBA_8888,
            MAX_IMAGE_COUNT);

然后在图像可用的侦听器上创建位图,

          try {
                image = reader.acquireLatestImage();
                if (image != null && mImagesProduced == 0){
                    Image.Plane[] planes = image.getPlanes();
                    Buffer imageBuffer = planes[0].getBuffer().rewind();

                    int pixelStride = planes[0].getPixelStride();
                    int rowStride = planes[0].getRowStride();
                    int rowPadding = rowStride - pixelStride * width;

                    // create bitmap
                    bitmap = Bitmap.createBitmap(width + rowPadding / pixelStride, height,
                            Bitmap.Config.ARGB_8888);
                    bitmap.copyPixelsFromBuffer(imageBuffer);

                    saveImage(context, bitmap);
                }

希望它有效

于 2021-01-18T07:42:49.050 回答