Estoy creando una aplicación que usa la cámara para tomar fotografías. Aquí está mi código fuente para hacer esto:
File file = new File(Environment.getExternalStorageDirectory(),
imageFileName);
imageFilePath = file.getPath();
Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
//Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(file));
startActivityForResult(intent, ACTIVITY_NATIVE_CAMERA_AQUIRE);
En el onActivityResult()
método, utilizo BitmapFactory.decodeStream()
para recoger la imagen.
Cuando ejecuto mi aplicación en Nexus One, funciona bien. Pero cuando ejecuto un Samsung Galaxy S o HTC Inspire 4G, la dirección de la imagen no es correcta.
- Captura con modo retrato, la imagen real (guardar en tarjeta SD) siempre gira 90 grados.
Vista previa de la imagen después de la toma --------- Imagen real en la tarjeta SD
- Captura con modo paisaje, todo está bien.
Vista previa de la imagen después de la toma --------- Imagen real en la tarjeta SD
android
orientation
android-camera-intent
Nguyen Minh Binh
fuente
fuente
Respuestas:
Hay bastantes temas y problemas similares por aquí. Como no estás escribiendo tu propia cámara, creo que se reduce a esto:
algunos dispositivos rotan la imagen antes de guardarla, mientras que otros simplemente agregan la etiqueta de orientación en los datos exif de la foto.
Recomiendo verificar los datos exif de la foto y buscar particularmente
Dado que la foto se muestra correctamente en su aplicación, no estoy seguro de dónde está el problema, ¡pero esto definitivamente debería ponerlo en el camino correcto!
fuente
Acabo de encontrar el mismo problema y utilicé esto para corregir la orientación:
Si el ancho del mapa de bits es mayor que la altura, la imagen devuelta está en horizontal, así que la giro 90 grados.
Espero que ayude a alguien más con este problema.
fuente
Se necesitan dos cosas:
La vista previa de la cámara necesita lo mismo que su rotación. Establecer esto por
camera.setDisplayOrientation(result);
Guarde la imagen capturada como vista previa de su cámara. Haga esto a través de
Camera.Parameters
.Espero que ayude.
fuente
parameters.setRotation(result)
, ¿no?fuente
Otra opción es rotar el mapa de bits en la pantalla de resultados de esta manera:
fuente
También tengo este tipo de problema para algunos dispositivos:
fuente
Pruebe de esta manera: static Uri image_uri; Mapa de bits estático imagen_tacada = nulo;
}
fuente
No más comprobar los datos exif de la foto. Sea fácil con Glide .
Google nos presentó una biblioteca Image Loader para Android desarrollada por bumptech llamada Glide como una biblioteca recomendada por Google. Se ha utilizado en muchos proyectos de código abierto de Google hasta ahora, incluida la aplicación oficial Google I / O 2014.
Ej: Glide.with (context) .load (uri) .into (imageview);
Para más: https://github.com/bumptech/glide
fuente
¡Espero que esto ayude! Gracias
fuente
Espero que esto ayude. ¡Gracias!
fuente
Acabo de encontrar el mismo problema aquí, el fragmento de código a continuación funciona para mí:
espero que esto ayude :)
fuente
Pruebe esto en la devolución de llamada surfaceChanged:
fuente
// clic en el botón
// método onActivityResult
// crea una ruta de archivo de clase
FilePath de clase pública {
}
fuente
El código es funcionalmente para paisaje y retrato @frontCameraID = variable lo obtuve el método clásico para mostrar cámara deseada
Método para obtener orientación y rotación para guardar la imagen y mostrar la orientación @resultado = orientación en la vista previa de la cámara @rotationPicture = rotación necesaria para guardar la imagen correctamente
Alguien pregunta sobre el código, por favor dímelo.
fuente
dos soluciones de una línea que utilizan Picasso y la biblioteca Glide
Después de pasar mucho tiempo con muchas soluciones para el problema de rotación de imágenes, finalmente encontré dos soluciones simples. No necesitamos hacer ningún trabajo adicional. Picasso y Glide son una biblioteca muy poderosa para manejar imágenes en su aplicación incluye. Leerá los datos EXIF de la imagen y las rotará automáticamente.
Usando la biblioteca de deslizamiento https://github.com/bumptech/glide
Usando la biblioteca de Picasso https://github.com/square/picasso
fuente