Ho scritto un'attività Android che acquisisce una foto programmaticamente. Voglio salvare l'immagine come JPEG con i dati di orientamento EXIF corretti (proprio come fa l'app nativa per Android Camera).Impostazione di Android Photo Orientamento EXIF
Ecco il metodo per prendere effettivamente la foto (ho rimosso i blocchi try/catch):
private void takePhoto() {
camera = Camera.open();
SurfaceTexture dummySurfaceTexture = new SurfaceTexture(0);
camera.setPreviewTexture(dummySurfaceTexture);
camera.startPreview();
camera.takePicture(null, null, jpgCallback);
}
... e il callback:
private Camera.PictureCallback jpgCallback = new Camera.PictureCallback() {
public void onPictureTaken(byte[] data, Camera camera) {
releaseCamera();
savePhoto(data);
};
La foto è presa correttamente, ma il mio problema è che i dati EXIF mostrano che l'orientamento è impostato su "Image Orientation: Top, Left-Hand" indipendentemente dall'orientamento del dispositivo, in modo tale che quando carico la foto appare capovolta o ruotato.
Ho davvero bisogno di acquisire manualmente l'orientamento del dispositivo (roll, pitch, azimuth) e scrivere da solo l'orientamento EXIF? In che modo l'app Camera scrive automaticamente questi dati correttamente? Qualcuno sa di un modo per impostare correttamente questo attributo?
MODIFICA: non è possibile utilizzare l'orientamento dello schermo poiché l'attività è bloccata in modalità verticale.
Ho già letto questa risposta, ma non può essere utilizzata poiché la mia attività è bloccata in modalità verticale. https://stackoverflow.com/questions/13245556/exif-orientation-tag-value-always-0-for-image-taken-with-portrait-camera-app-and/13323987#13323987 –