2010-04-26 11 views
10

Estoy creando una aplicación de Android que utiliza imágenes capturadas por el usuario como parte de un proceso más amplio. Hasta ahora, mi diseño XML tiene un SurfaceView y un botón dentro de RelativeLayout. Logré que la vista previa de la cámara se muestre en SurfaceView, pero me quedo atascado sobre cómo tomar una foto y guardarla cuando un usuario presiona el botón.Tome y guarde la imagen en el botón presione

Mi archivo de clase se ve algo como la demo API CameraPreview: http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/CameraPreview.html

Idealmente, cuando el botón se pulsa la cámara debe enfocar automáticamente, tomar una foto (con el sonido clicky), guardarlo en /data/data/app_package_structure/files/file_name.jpg, a continuación, el pop un Toast para decirle al usuario que su imagen se ha guardado.

Cualquier ayuda es muy apreciada :)

Respuesta

12

Creo CommonsWare realmente ya ha respondido a la mayor parte de esta pregunta, pero esto podría funcionar para el enfoque automático y el sonido del obturador. Esto es una suposición, ya que no estoy en una máquina en la que pueda compilar/probar nada de esto.

En su código de pulsación de botón de manipulación, creo que usted debe llamar a (posiblemente mediante el paso de mensajes)

camera.autoFocus(new Camera.AutoFocusCallback() { 
    Camera.ShutterCallback shutterCallback = new Camera.ShutterCallback() { 
    public void onShutter() { 
     // Play your sound here. 
    } 
    }; 
    public void onAutoFocus(boolean success, Camera camera) { 
    camera.takePicture(shutterCallback, null, photoCallback); 
    } 
}); 

donde camera es su objeto de cámara, y photoCallback es el mismo que en el ejemplo de CommonsWare.

Exactamente qué es lo que usted está atascado en?

Ah, y no olvides agregar la etiqueta <uses-feature>android.hardware.camera.autofocus. :)

+0

Esto es una ayuda excelente. Mi enfoque automático está funcionando bien ahora. Acabo de superar un obstáculo, salvando la imagen. ¿Qué devuelve takePicture(), qué hago con él en PhotoCallback y cómo guardo ese resultado como una imagen? – greenie

+1

Bueno, mi opinión es que 'takePicture' devuelve nada, en lugar de la imagen se pasa como un formato JPEG de matriz de bytes a través de su photoCallback' onPictureTaken (byte de datos [], la cámara de la cámara) 'método de devolución de llamada. Probablemente solo tenga que escribir esos bytes directamente en el archivo. –

+0

Al menos esa fue mi impresión de http://developer.android.com/reference/android/hardware/Camera.PictureCallback.html y http://developer.android.com/reference/android/hardware/Camera.html# takePicture% 28android.hardware.Camera.ShutterCallback, 20android.hardware.Camera.PictureCallback%,% 20android.hardware.Camera.PictureCallback% 29 –

9

Here is a sample application que se encarga de la toma de una foto-y-salvar-se-parte. Auto-focus, clicky, Toast, y guardar en la tienda de archivos local de la aplicación frente a la tarjeta SD se dejan como ejercicios para el estudiante. :-)

+0

Gracias para que sameple (que ya he visto antes) pero estoy realmente en busca de una respuesta más completa a mi pregunta. – greenie

+0

@CommonsWare: solo una actualización: estaba buscando SurfaceHolder en los documentos del desarrollador y se afirma que el método setType ha quedado en desuso y también lo son las constantes SURFACE_TYPE_PUSH_BUFFERS, SURFACE_TYPE_NORMAL, SURFACE_TYPE_HARDWARE y SURFACE_TYPE_GPU. – Abhijit

+0

@Abhijit: Desaprobaron a partir de Android 3.0. Los necesitas para Android 1.xy 2.x. Se pueden omitir para Android 3.xy superior. – CommonsWare

Cuestiones relacionadas