我試圖挽救YUV在android系統camera2獲得JPEG 420個預覽畫面爲JPEG。我發現這樣做的唯一方法是將yuv420轉換爲nv21,構建一個yuvimage,然後使用compresstojpeg方法獲取jpeg。爲了從YUV420轉換到jpeg我使用下面轉換YUV420在android系統camera2
Image.Plane Y = img.getPlanes()[0];
Image.Plane U = img.getPlanes()[2];
Image.Plane V = img.getPlanes()[1];
int Yb = Y.getBuffer().remaining();
int Ub = U.getBuffer().remaining();
int Vb = V.getBuffer().remaining();
byte[] data = new byte[Yb + Ub + Vb];
Y.getBuffer().get(data, 0, Yb);
U.getBuffer().get(data, Yb, Ub);
V.getBuffer().get(data, Yb + Ub, Vb);
YuvImage yuvImage = new YuvImage(data, ImageFormat.NV21,
mPreviewSize.getWidth(), mPreviewSize.getHeight(), null);
ByteArrayOutputStream out = new ByteArrayOutputStream();
yuvImage.compressToJpeg(new Rect(0, 0,
mPreviewSize.getWidth(), mPreviewSize.getHeight()),
100, out);
然而這會導致在獲得綠色圖像的某些分辨率144 X 176,176×144,352×288,480x360,720x540和1280×960的邏輯。轉換爲nv21的邏輯是否正確?我可以使用其他方式從yuv420轉換爲jpeg。 有沒有Java/Android API?
感謝您的輸入。你有沒有任何參考資料可以查找這個特定轉換的算法。 – user3294816
我沒有方便的Java參考,但添加了C ++代碼參考 –
謝謝!這工作完美無瑕。我只需要切換Cr和Cb的定義即可正確顯示顏色。 – user3294816