dispositivo Droid - no girará la imagen capturada de la cámara? (Camera.Parameters)

StackOverflow https://stackoverflow.com/questions/1934378

  •  20-09-2019
  •  | 
  •  

Pregunta

Estoy usando el código de cámara para pedir la cámara para rotar la imagen capturada de datos:

Camera.Parameters params = camera.getParameters();
params.set("rotation", 90);
camera.setParameters(params);

esto parece funcionar en todos los teléfonos, excepto el Droid. ¿Alguien más ha visto esto? Los datos de imagen es siempre el paisaje, sin embargo, la aplicación de la cámara nativa en el Droid produce imágenes de retrato bien.

Me pregunto si el Droid sólo se respetará el nuevo método Camera.Parameters.setRotation(), pero esto parece ser sólo está disponible en el nivel 5 de la API?

¿Fue útil?

Solución

La rotación simplemente se puede almacenar en la cabecera Exif jpeg como se explica en el documento setRotation. En Droid que es realmente el caso. Puede utilizar las herramientas de lectura de cabecera como jpeg jhead para verificar esto. También puede utilizar el ExifInterface API para leer la etiqueta de orientación en su programa.

Otros consejos

setRotation tampoco parece funcionar para mí en el Nexus One, pero me hizo llegar rotación de imagen para trabajar siguiendo el ejemplo de la propia aplicación de la cámara androide.
El código fuente está disponible aquí: https://android.googlesource.com/platform/packages/apps/Camera

comenzar con el Camera.java, pero también se le busca en ImageManager.java, Util.java y otros archivos.

La idea básica es que escuchar los cambios de orientación y capturar lo que la orientación es en el momento en que tomó la foto. Entonces, cuando se obtiene la imagen de bytes en la devolución de llamada, manipular el mapa de bits, haciendo un giro en el mapa de bits. A continuación, convertir el mapa de bits girado de nuevo a JPEG. Cuando haya terminado, se le han tenido que copiar una cantidad sorprendente de código de la aplicación de la cámara sólo para esta rotación.

El Droid corre Android 2.0 (bueno, ahora 2.0.1), que son niveles de API 5 y 6, respectivamente.

Así que es muy posible que el Droid sólo respeta la (más sensible) 2.0+ API para la rotación.

Sin embargo, creo que su preocupación es la compatibilidad en una amplia gama de tipos de dispositivos y versiones del sistema operativo, así que me imagino que tendría que invocar la API 2.0+ través de la reflexión después de detectar la versión del sistema operativo (usando android.os.Build.VERSION_CODES).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top