Napisałem działanie Androida, które przechwytuje zdjęcie programowo. Chcę zapisać obraz jako JPEG z odpowiednimi danymi orientacji EXIF (tak jak aplikacja Android aparatu działa automatycznie).Ustawienie orientacji EXIF dla zdjęć Androida
Oto metoda faktycznie zrobieniu zdjęcia (usunąłem bloków try/catch):
private void takePhoto() {
camera = Camera.open();
SurfaceTexture dummySurfaceTexture = new SurfaceTexture(0);
camera.setPreviewTexture(dummySurfaceTexture);
camera.startPreview();
camera.takePicture(null, null, jpgCallback);
}
... i zwrotna:
private Camera.PictureCallback jpgCallback = new Camera.PictureCallback() {
public void onPictureTaken(byte[] data, Camera camera) {
releaseCamera();
savePhoto(data);
};
Zdjęcie jest zrobione poprawnie, ale moim problemem jest to, że dane EXIF pokazują, że orientacja jest ustawiona na "Orientacja obrazu: góra, lewa ręka", niezależnie od orientacji urządzenia, tak że po załadowaniu zdjęcia pojawia się do góry nogami lub obrócona.
Czy muszę ręcznie przechwytywać orientację urządzenia (rolka, skok, azymut) i samemu zapisać orientację EXIF? W jaki sposób aplikacja Aparat automatycznie zapisuje te dane poprawnie? Czy ktoś wie o sposobie poprawnego ustawienia tego atrybutu?
EDYCJA: Nie mogę użyć orientacji ekranu, ponieważ działanie jest zablokowane w trybie portretu.
Przeczytałem już tę odpowiedź, ale nie można jej użyć, ponieważ moja aktywność jest zablokowana w trybie portretu. https://stackoverflow.com/questions/13245556/exif-orientation-tag-value-always-0-for-image-taking-w-portret-camera-app-and/13323987#13323987 –