2009-06-23 66 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的例子。