2009-06-23 15 views
6

Me gustaría guardar un marco de vista previa como una imagen jpeg.Android: ¿Cómo guardar un marco de vista previa como imagen jpeg?

He tratado de escribir el siguiente código:

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++; 
    } 
} 

pero no es posible abrir un archivo guardado como una imagen JPEG. ¿Alguien sabe cómo guardar marcos de vista previa como imágenes jpeg?

Gracias

Respuesta

-1

_data probablemente no esté en formato JPEG. ¿Llamó al Camera.Parameters.setPreviewFormat(PixelFormat.JPEG) antes de llamar a la vista previa de inicio?

+0

no resuelve el problema –

+0

¿En qué formato los parámetros de la cámara dicen que está la imagen? – hacken

+0

todas las cámaras android soporte dosent formato jpeg para obtener datos de vista previa – MoHaKa

0

que establezca la PreviewFormat con Camera.Parameters.setPreviewFormat (PixelFormat.JPEG) antes vista previa, pero parece que no puede realmente establecer el previewformat ...... Por cierto, el formato por defecto de la Vista previa es YCbCr_420_SP ....

1

Tiene que convertirla manualmente, hay algunos ejemplos en la lista de desarrolladores de android si navega por el archivo, en su mayoría se ocupa de la conversión de formato (luminancia/crominancia, etc.) y luego escribe la imagen a un mapa de bits, luego guardar en un archivo.

Realmente es un poco penoso.

0

Primero debe comprobar cuáles son los formatos de vista previa admitidos para su dispositivo llamando al getSupportedPreviewFormats(). Asegúrese de que JPEG sea compatible antes de llamar al setPreviewFormat (PixelFormat.JPEG).

4

ingrese este código. Espero que ayude

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 no es un formato para la Vista previa de la cámara. Como dice official documentation,

"Sólo ImageFormat.NV21 y ImageFormat.YUY2 están soportados por ahora"

Con el fin de obtener una imagen de vista previa de cámara, es necesario definir el formato de vista previa, como a continuación:

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

Después de eso, se comprime & Guardar JPEG como en el ejemplo de Dany.

Cuestiones relacionadas