安卓相机2 YUV 2048x1536拍摄的图像被拉伸(不是预览)



我试图捕捉YUV图像,但被拉伸了。我正在使用Android Camera2https://github.com/googlearchive/android-Camera2Basic.Android SDK是28。

当我使用ImageReader从方法setOnImageAvailableListener((捕获YUV 2048x1536中的相机帧时,我面临着一个奇怪的行为。捕获被拉伸:

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, 0, bytes.length, null);
image.close();
}
}, mBackgroundHandler);

要将图像转换为位图,我使用了这个如何将android.media.image转换为位图对象?:

Image image = reader.acquireLatestImage();
ByteBuffer buffer = image.getPlanes()[0].getBuffer();
byte[] bytes = new byte[buffer.capacity()];
buffer.get(bytes);
Bitmap bitmapImage = BitmapFactory.decodeByteArray(bytes, 0, bytes.length, null);

然而,如果我改变分辨率,我的捕获是好的(YUV 960x720(:

YUV 960x720 ok

我不知道为什么YUV 2048x1536中的捕获被拉伸,而YUV 960x720中的捕获不是吗?唯一的变化是分辨率

感谢

设备是否在其流配置映射中实际将2048x1536列为支持的大小?有时相机设备会接受他们没有列出的分辨率,但随后无法正确输出

不幸的是,如果列出了这个尺寸,那么这可能只是该设备相机实现中的一个错误。

(此外,看起来您拍摄的是JPEG图像,而不是未压缩的YUV,这在这里并不一定重要(。

最新更新