2016-01-01 211 views
0

我很努力地将YuvImage转换为Android 5.0.1设备上的png图像格式,其中png显示为绿色图像。在Android 5.1.1上,这并没有发生,图像显示得很好。 经过一段时间后,我发现Android 5.0.1中存在一个错误,这使得转换后的图像显示为绿色。这是固定在Android 5.1.1将YUV图像格式转换为PNG

然而,有没有人知道一个解决方案,以使这项工作的设备还没有得到这个修复?

+0

你使用Camera 2 API还是旧版? – silvaren

+0

@silvaren我正在使用Camera 2 API – Araw

回答

1

我不认为有一种方法可以解决该错误,因为根据我的经验,图像在系统生成时已经是绿色的,并且它不是转换为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正在NV21字节数组由旧照相机API onPreviewFrame(...)方法返回。

+0

添加了弃用的Camera API。所以只有使用5.1.1及以上版本的设备才会使用Camera2 API。 – Araw