将 YUV 图像格式转换为 PNG

Convert YUV imageformat to PNG

我在 Android 5.0.1 设备上努力将 YuvImage 转换为 png 图像格式,其中 png 显示为绿色图像。在 Android 5.1.1 上没有发生这种情况,图像显示得很好。 一段时间后,我发现 Android 5.0.1 中存在一个错误,它使转换后的图像显示为绿色。这已在 Android 5.1.1

中修复

但是,有没有人知道解决方案,以便在尚未获得此修复的设备上运行此功能?

我认为没有办法解决这个错误,因为根据我的经验,系统生成的图像已经是绿色的,这不是转换为 PNG 的问题。

我从您的评论回复中看到您正在使用 Camera 2 API,并且由于您使用的是 YUV 格式,我相信您正在尝试从相机的连续馈送中保存图像(而不是全分辨率拍照)。如果是这种情况,我会建议尽可能使用旧相机 API,因为我还没有看到在捕获 YUV 格式(NV21)的预览图像时不起作用的设备,它可以很容易地转换为 PNG,尽管必须经过 JPEG 步骤:

YuvImage yuvImage = new YuvImage(nv21bytearray, ImageFormat.NV21, width, height, null);
ByteArrayOutputStream os = new ByteArrayOutputStream();
yuvImage.compressToJpeg(new Rect(0, 0, width, height), 100, os);
byte[] jpegByteArray = os.toByteArray();
Bitmap bitmap = BitmapFactory.decodeByteArray(jpegByteArray, 0, jpegByteArray.length);
FileOutputStream fos = new FileOutputStream(Environment.getExternalStorageDirectory() + "/imagename.png");
bitmap.compress(Bitmap.CompressFormat.PNG, 100, fos);
fos.close();

其中 nv21bytearray 是旧相机 API onPreviewFrame(...) 方法返回的 NV21 字节数组。