2016-01-01 238 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