2009-06-23 68 views
6

我想將預覽幀保存爲jpeg圖像。Android:如何將預覽幀保存爲jpeg圖像?

我試圖寫下面的代碼:

public void onPreviewFrame(byte[] _data, Camera _camera) 
{ 
    if(settings.isRecording()) 
    { 
     Camera.Parameters params = _camera.getParameters(); 
     params.setPictureFormat(PixelFormat.JPEG); 
     _camera.setParameters(params); 
     String path = "ImageDir" + frameCount; 
     fileRW.setPath(path); 
     fileRW.WriteToFile(_data); 
     frameCount++; 
    } 
} 

,但它無法打開保存文件爲JPEG圖像。有誰知道如何將預覽幀保存爲jpeg圖像?

謝謝

回答

-1

_data可能不是JPEG格式。在致電開始預覽之前,你撥打了Camera.Parameters.setPreviewFormat(PixelFormat.JPEG)嗎?

+0

它不能解決問題 – 2009-06-26 15:11:56

0

我在預覽之前設置了Camera.Parameters.setPreviewFormat(PixelFormat.JPEG)的PreviewFormat,但它似乎不能真正設置預覽格式...... 順便說一下,默認格式預覽是YCbCr_420_SP ....

1

您必須手動將其轉換,如果您瀏覽歸檔文件 - 主要處理格式(亮度/色度等)轉換,然後編寫android-developers列表中的一些示例將圖像轉換爲位圖,然後保存到文件中。

真的很痛苦。

0

您必須先通過調用getSupportedPreviewFormats()來檢查設備支持哪些預覽格式。在調用setPreviewFormat(PixelFormat.JPEG)之前,請確保支持JPEG。

4

結帳此代碼。我希望它可以幫助

camera.setPreviewCallback(new PreviewCallback() { 
        @Override 
        public void onPreviewFrame(byte[] data, Camera camera) { 
         // TODO Auto-generated method stub 
         Camera.Parameters parameters = camera.getParameters(); 
         Size size = parameters.getPreviewSize(); 
         YuvImage image = new YuvImage(data, ImageFormat.NV21, 
           size.width, size.height, null); 
         Rect rectangle = new Rect(); 
         rectangle.bottom = size.height; 
         rectangle.top = 0; 
         rectangle.left = 0; 
         rectangle.right = size.width; 
         ByteArrayOutputStream out2 = new ByteArrayOutputStream(); 
         image.compressToJpeg(rectangle, 100, out2); 
         DataInputStream in = new DataInputStream(); 
         in.write(out2.toByteArray()); 

         } 
        } 

       }); 
       camera.startPreview(); 
0

JPEG不是Camera Preview的格式。作爲official documentation說,

「只有ImageFormat.NV21和ImageFormat.YUY2支持現在」

爲了從相機預覽獲得一個圖片,你需要定義預覽格式,如下:

Camera.Parameters parameters; 
parameters.setPreviewFormat(ImageFormat.NV21); //or ImageFormat.YU2 

之後,你壓縮&保存JPEG在Dany的例子。