问题描述
我正在尝试捕获YUV图像,但是被拉长了。我正在按照https://github.com/googlearchive/android-Camera2Basic使用Android Camera2。 Android SDK是28。
当我使用ImageReader从setonImageAvailableListener()方法中捕获YUV 2048x1536中的摄像机帧时,我面临一种奇怪的行为。捕获范围很广:
我做什么:
pictureImageReader.setonImageAvailableListener(
reader -> {
Image image = reader.acquireLatestimage();
if(image != null){
ByteBuffer buffer = image.getPlanes()[0].getBuffer();
byte[] bytes = new byte[buffer.capacity()];
buffer.get(bytes);
Bitmap bitmapImage = BitmapFactory.decodeByteArray(bytes,bytes.length,null);
image.close();
}
},mBackgroundHandler);
要将图像转换为位图,我使用了以下How to convert android.media.Image to bitmap object?:
Image image = reader.acquireLatestimage();
ByteBuffer buffer = image.getPlanes()[0].getBuffer();
byte[] bytes = new byte[buffer.capacity()];
buffer.get(bytes);
Bitmap bitmapImage = BitmapFactory.decodeByteArray(bytes,null);
但是,如果我更改分辨率,则捕获效果很好(YUV 960x720):
我不知道为什么扩展YUV 2048x1536中的捕捉而在YUV 960x720中不是吗?唯一的变化是分辨率
谢谢
解决方法
设备是否在其流配置图中将2048x1536实际列出为受支持的大小?有时,摄像头设备会接受它们未列出的分辨率,但无法正确输出。
如果列出了该尺寸,那么很遗憾,这可能只是该设备的相机实现上的错误。
(此外,您似乎正在捕获JPEG图像,而不是未压缩的YUV,但这不一定很重要)。