Deberá detener los marcos que se envían a la superficie y visualizarse automáticamente. Hice esta pregunta y obtuve esta respuesta, https://stackoverflow.com/a/4363417/514531, básicamente tienes que cambiar el tipo de SurfaceView a la configuración predeterminada en lugar de mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
, así que simplemente omite esta línea. En segundo lugar, no desea configurar la vista previa de ninguna pantalla, de modo que cuando esté configurando la cámara, elimine la línea Camera.setPreviewDisplay(mHolder); // mHolder is your holder to the SurfaceView
Supongo que tiene configurada una Devolución de llamada de cámara, esto se logra haciendo que su clase implemente el Camera.PreviewCallback
, esto incluirá un método onPreviewFrame()
donde se reciben tramas sin procesar. Necesitará procesar estos marcos en mapas de bits y esto se explica en https://stackoverflow.com/a/4367250/514531. Una vez que haya hecho esto, puede hacer cualquier procesamiento de imagen en la imagen. Cuando desee visualizar imágenes en SurfaceView, puede hacerlo manualmente dibujando los mapas de bits en un lienzo en SurfaceView. Primero crea un objeto Canvas y lo asocia al SurfaceView usando Canvas mCanvas = mHolder.lockCanvas()
, ahora puede usar los diversos métodos Draw de la clase Canvas para mostrar su Bitmap en la pantalla. Después de haber utilizado los métodos Draw, llame al mHolder.unlockCanvas()
, para ver la imagen. Espero que esto sea lo que estabas buscando.