Asegúrese de que las fotos se guardan con la misma orientación que se tomaron?
Por alguna razón, mi aplicación de cámara ahorra todas las fotos giradas 90 grados (las imágenes sólo se ven bien cuando se toma con la cámara en modo horizontal) Creo que enPictureTaken debe girar las fotos automáticamente, pero leí que hay un problema con los dispositivos Samsung (no he podido Para probarlo en otra marca por lo que no sé si es el caso). Este es mi código:
public void onPictureTaken(byte[] data, Camera camera) { // Generate file name FileOutputStream outStream = null; outStream = new FileOutputStream(filePath); outStream.write(data); outStream.close();
Yo estaba pensando que podría fijarse mediante la comprobación de la orientación y la rotación de la matriz de bytes, pero debe haber una manera más sencilla de hacerlo ya que la manipulación de arrays de bytes es un dolor. ¿Cómo puedo asegurarme de que las fotos se guarden de acuerdo con la orientación que tomaron?
- Elemento de fila personalizada de Android para ListView
- ¿Cuál es la diferencia entre setVideoPath de VideoView y setVideoURI
- Android Horizontal LinearLayout - Envolver elementos
- Mejores prácticas de Android: vistas / actividades
- GamesClient no se conecta. Error: "Llamar a connect () y esperar a que onConnected () sea llamado."
- La aplicación no está configurada correctamente para utilizar los servicios de juego de Google
- ¿Cómo implementar un simple método de resaltado de sintaxis para edittext?
- Variables estáticas, ¿cuál es su vida útil?
- La URL del contexto no puede estar vacía - Plugin de Gradle de Artifactory con Plugin de Android
- GSON evitar el JsonSyntaxException devolver el mapeo parcial
- Reflexión para un campo que va mal
- Eclipse / Java - Valores en R.string. * Return int?
- ASM o análogo CGLIB para Dalvik
Intente algo como esto:
int orientation = Exif.getOrientation(data); Log.d("#", "onPictureTaken().orientation = " + orientation); if(orientation != 0) { Bitmap bmpSrc = BitmapFactory.decodeByteArray(data, 0, data.length); Bitmap bmpRotated = CameraUtil.rotate(bmpSrc, orientation); bmpSrc.recycle(); try { FileOutputStream localFileOutputStream = new FileOutputStream(filePath); bmpRotated.compress(Bitmap.CompressFormat.JPEG, 90,localFileOutputStream); localFileOutputStream.flush(); localFileOutputStream.close(); bmpRotated.recycle(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } else { try { FileOutputStream localFileOutputStream = new FileOutputStream(filePath); localFileOutputStream.write(data); localFileOutputStream.flush(); localFileOutputStream.close(); } catch (IOException localIOException) { Log.e("#",localIOException.getMessage()); } }
Hay diferentes maneras de obtener su imagen, como datos, como secuencia, como archivo, también es diferente para la cámara y la galería y otras aplicaciones. Para cada uno de ellos tiene otra forma de acceder a la etiqueta de orientación. Una vez que tengas la orientación, puedes girar tu imagen.
Usted – o para que todo el mundo – debe realmente obtener un Nexus, son agradables y girar la imagen para usted y establecer la orientación a 0, mientras que los perezosos como Samsung sólo almacenar la imagen y establecer la etiqueta de orientación. 😉
- ¿Cómo reducir la variabilidad en el retraso del obturador de la cámara Android?
- Cómo obtener el número smsc de un teléfono en android?