问题描述
我正在尝试使用服务为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);
}
希望它有效