2014-09-02 37 views
4

我正在從相機獲取預覽數據。它是NV21格式。我想將預覽保存到SD卡,即位圖。我的代碼獲取圖像並保存它,但是在圖庫中沒有捕獲預覽。它只是黑色的矩形,下面是代碼。如何轉換位圖中的NV21圖像格式?

public void processImage() { 

    Bitmap bitmap = null; 

    if (flag == true) { 

     flag = false; 

     if (mCamera != null) { 

      Camera.Parameters parameters = mCamera.getParameters(); 

      int imageFormat = parameters.getPreviewFormat(); 

      if (imageFormat == ImageFormat.NV21) { 
       Toast.makeText(mContext, "Format: NV21", Toast.LENGTH_SHORT) 
         .show(); 
       int w = parameters.getPreviewSize().width; 
       int h = parameters.getPreviewSize().height; 

       YuvImage yuvImage = new YuvImage(mData, imageFormat, w, h, 
         null); 

       Rect rect = new Rect(0, 0, w, h); 

       ByteArrayOutputStream baos = new ByteArrayOutputStream(); 

       yuvImage.compressToJpeg(rect, 100, baos); 

       byte[] jData = baos.toByteArray(); 

       bitmap = BitmapFactory.decodeByteArray(jData, 0, 
         jData.length); 
      } 

      else if (imageFormat == ImageFormat.JPEG 
        || imageFormat == ImageFormat.RGB_565) { 

       Toast.makeText(mContext, "Format: JPEG||RGB_565", 
         Toast.LENGTH_SHORT).show(); 
       bitmap = BitmapFactory.decodeByteArray(mData, 0, 
         mData.length); 
      } 
     } 

     if (bitmap != null) { 
      saveImage(bitmap); 
      Toast.makeText(mContext, "Image Saved", Toast.LENGTH_SHORT) 
        .show(); 
     } else 
      Toast.makeText(mContext, "Bitmap Null", Toast.LENGTH_SHORT) 
        .show(); 
    } 
} 
+0

您是否找到了解決方案? – Tony 2015-08-28 16:42:12

回答

0

如果你想保存NV21預覽圖片查看畫廊中的最簡單的方法是從NV21字節數組創建一個YuvImage,然後在文件輸出流將其壓縮爲JPEG,如代碼如下:

FileOutputStream fos = new FileOutputStream(Environment.getExternalStorageDirectory() + "/imagename.jpg"); 
YuvImage yuvImage = new YuvImage(nv21bytearray, ImageFormat.NV21, width, height, null); 
yuvImage.compressToJpeg(new Rect(0, 0, width, height), 100, fos); 
fos.close(); 

請注意,您可能想要更改保存圖像的路徑。

相關問題