2011-03-26 11 views
5

Para la vista previa de la cámara, podemos configurar un SurfaceView para mostrar los datos de vista previa por flujo de trabajo de la cámara. Pero quiero mejorar primero los datos de vista previa (como extraer el mapa de borde), luego mostrar los datos de vista previa mejorada a sufaceView (como solo mostrar el mapa de borde).¿Cómo mejorar la vista previa de la cámara?

¿Cómo debo hacer eso?

Respuesta

4

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.

Cuestiones relacionadas