Estoy usando una Vista previa para mostrar lo que la cámara ve en la pantalla.
Puedo hacer que todo funcione bien, superficie creada, conjunto de superficie y se muestra la superficie.
Sin embargo, siempre muestra la imagen en un ángulo incorrecto de 90 grados en modo vertical.
Como en la imagen:
Soy consciente de que usar el siguiente código aclarará la situación:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
Sin embargo, tengo la Vista previa dentro de una Actividad que tiene otros elementos y no tiene sentido que mi Actividad se muestre en modo horizontal. (Está deshabilitado por defecto)
Entonces, me preguntaba ¿hay alguna forma de cambiar la orientación de la Vista previa? ¿Y dejar el resto de mi actividad correctamente en modo vertical?
¿O de todos modos rotar la vista previa para que se muestre correctamente?
Respuestas:
Este problema parece comenzar como un error con cierto hardware, vea aquí, pero puede superarse mediante el uso de la llamada a mCamera.setDisplayOrientation (grados) disponible en la API 8. Entonces, así es como lo implemento:
Esto estaba en un HTC Desire y tuve que poner inicialmente declaraciones de registro en cada una de las comprobaciones de rotación para decir cuál era la rotación y luego depurar en el dispositivo y observar la salida de logCat mientras giraba el dispositivo. Para el HTC Desire, 0 era el teléfono como era de esperar (retrato), 90 grados giraba el teléfono 90 grados en sentido contrario a las agujas del reloj (supuse que habría sido en el sentido de las agujas del reloj). En el código que verá, no necesitaba hacer ninguna rotación de pantalla cuando el teléfono estaba a 90 o 180 grados; el dispositivo parecía manejar esto por sí mismo. Solo un punto no funciona correctamente: la rotación de 270 grados es cuando gira el dispositivo 90 grados en el sentido de las agujas del reloj y la rotación de la pantalla muestra que está bien, pero si gira el dispositivo 270 grados en sentido contrario a las agujas del reloj, no parece compensarlo correctamente.
PD Tenga en cuenta el swapover de ancho y alto en las rotaciones apropiadas.
fuente
mCamera.setParameters(parameters);
declaración bloquea mi aplicación, porque las dimensiones de la superficie no son un tamaño de vista previa válido para mi teléfono (¿tal vez porque mantengo la barra de estado visible?). Sin embargo, ¡descubrí que usarmCamera.setDisplayOrientation(90)
entoncesmCamera.setPreviewDisplay(mSurfaceHolder);
sin establecer los parámetros también funcionó!intente establecer la orientación de la pantalla. Resuelve mi problema.
fuente
onPreviewFrame()
oonPictureTaken()
prueba este código
fuente
Estaba teniendo un problema con la cámara frontal (problema al revés). Luego utilicé el siguiente método documentado en Documentos de Android :
fuente
Lo hice siguiendo los consejos de mCamera.setDisplayOrientation (90); pero también roté el mapa de bits porque, por alguna razón, los otros enfoques no funcionan para mí en la versión 2.3.3.
Para rotar el mapa de bits hice esto:
fuente
Comparé mi código con el tutorial y lo que finalmente solucionó fue poner el siguiente código en mi AndroidManifext.xml: En la
<activity>
etiqueta:fuente
fuente
Creo que el valor SENSOR_ORIENTATION explicará qué valor se usará para la rotación en lugar de codificar a 90 grados
fuente