将YUV imageformat转换为PNG

时间:2016-01-01 20:33:52

标签: android yuv

我很想让YuvImage在Android 5.0.1设备上获得png图像格式,其中png显示为绿色图像。在Android 5.1.1上,这没有发生,图像显示得很好。 一段时间后,我发现Android 5.0.1中存在一个错误,使得转换后的图像显示为绿色。这已在Android 5.1.1中修复

但是,有没有人知道一个解决方案,以便在没有得到此修复的设备上使用它?

1 个答案:

答案 0 :(得分:2)

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

我发现您正在使用评论响应中的Camera 2 API,并且由于您使用的是YUV格式,我相信您正在尝试保存来自相机的连续进纸中的图像(而不是全分辨率照片拍摄)。如果是这种情况,我建议尽可能使用较旧的Camera 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字节数组。