Убедитесь, что фотографии сохранены с той же ориентацией, что и они были сделаны?

По какой-то причине приложение для камеры сохраняет все снимки, повернутые на 90 градусов (только снимки выглядят правильно, когда вы снимаете камеру в альбомном режиме) Я считаю, что onPictureTaken должен автоматически поворачивать фотографии, но я читал, что есть проблемы с устройствами Samsung (я не смог Проверить его на другой марки, поэтому я не знаю, так ли это). Это мой код:

public void onPictureTaken(byte[] data, Camera camera) { // Generate file name FileOutputStream outStream = null; outStream = new FileOutputStream(filePath); outStream.write(data); outStream.close(); 

Я думал, что это можно исправить, проверив ориентацию и повернув массив байтов, но должен быть более простой способ сделать это, поскольку обработка массивов байтов – это боль. Как я могу убедиться, что фотографии сохранены в соответствии с их ориентацией?

Solutions Collecting From Web of "Убедитесь, что фотографии сохранены с той же ориентацией, что и они были сделаны?"

Попробуйте что-то вроде этого:

 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()); } } 

Существуют различные способы получить ваше изображение, как данные, как поток, как файл, а также для камеры и галереи и других приложений. Для каждого из них у вас есть другой способ доступа к тегу ориентации. После ориентации вы можете повернуть изображение.

Вы – или, в этом отношении, все – должны действительно получить Nexus, они хороши и поворачивают изображение для вас и устанавливают ориентацию на 0, в то время как ленивые, такие как Samsung, просто хранят изображение и устанавливают ориентационный тег. 😉