如何解决Android屏幕截图错误:RGBA覆盖BLOB格式缓冲区应具有height == width
我正在尝试使用服务为Android设备(三星Galaxy Tab S5e)截图。 我正在使用here中的代码。
在链接的代码中,使用ImageReader.newInstance(mWidth,mHeight,PixelFormat.RGBA_8888,2);
。请注意PixelFormat.RGBA_8888
。现在,这将不允许我编译我的项目,并且遇到错误:Error: Must be one of: ImageFormat.UNKNOWN,ImageFormat.RGB_565... etc
。
所以我尝试将PixelFormat.RGBA_8888
更改为ImageFormat.JPEG
并进行编译。但是,我的应用现在崩溃,并显示以下消息:
RGBA覆盖BLOB格式缓冲区应具有height == width
我尝试将PixelFormat.RGBA_8888
更改为0x4
,0x1
,ImageFormat.RGB_565
等。这样做通常会导致消息异常:
生产者输出缓冲区格式0x1与ImageReader的配置缓冲区格式0x4不匹配。
这与onImageAvailable(ImageReader reader)
中描述的格式有所关联。
我看过following SO post,看来正确的格式是特定于设备的,但是我已经尝试了全部,错误是上述之一。
我全神贯注(而且我是Java / Android newb),所以真的可以使用一些帮助。
解决方法
创建图像阅读器如下,
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,Bitmap.Config.ARGB_8888);
bitmap.copyPixelsFromBuffer(imageBuffer);
saveImage(context,bitmap);
}
希望它有效
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。