Quiero hacer el procesamiento de imágenes con una imagen en bruto sin mostrarlo en la pantalla, lo que obviamente reduce el rendimiento.
De acuerdo con las respuestas a este hilo. Tomar una foto desde la cámara sin vista previa no fue posible en Android 1.5, pero ¿alguien sabe si es posible en Android 4 (API de nivel 15)?
En Android 4, la opción más simple para recibir datos de imágenes en bruto sin mostrarlos en la pantalla es usar la llamada Camera.setPreviewTexture () para enrutar los marcos de vista previa a la GPU.
Puedes usar esto de dos maneras:
Como no tengo permitido comentar En cuanto a la respuesta de Eddy. Debe trabajar con esto en el NDK ya que el uso de la interfaz Java anulará cualquier beneficio de rendimiento. Tener que trabajar con un PixelBuffer es una locura desde el punto de vista del rendimiento. Su conversión de RGBA888 a YUV también debe hacerse en C.
No intente usar un TextureView ya que será aún peor. Tendría que copiar los Pixels en un bitmap y luego desde un bitmap en una matriz antes de la conversión a YUV. Esto, por sí solo, lleva casi el 30% de la utilización de la CPU en un nuevo y flamante Nexus 7 2013.
La forma más eficiente es hablar directamente con Camera.h y omitir todas las API de Android. Puede crear su propio búfer e interceptar los datos del YUV antes de que vaya a otro lado.
Mostrar vista previa en la pantalla no tiene consecuencias en el rendimiento. En todos los dispositivos que conocí, la salida de la cámara está “conectada” a una superficie o textura sin CPU, toda la conversión de color y escalado está a cargo de hardware dedicado.
Puede haber otras razones para “ocultar” la vista previa, pero tenga en cuenta que el objective de la API era, en primer lugar, asegurarse de que el usuario final vea todo lo que llega de la cámara a la aplicación, por razones de privacidad y seguridad.