ACTION_IMAGE_CAPTURE проблема ориентации на Nexus S и Samsung Galaxy S I9000 - PullRequest
7 голосов
/ 26 мая 2011

Я пытаюсь сделать снимок и сохранить его во внутренней памяти, используя следующий код:

Intent intent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE);
takenPhoto = new File(uploadsFolder, getNewPicFileName());
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(takenPhoto));
startActivityForResult(intent, SHOOT_MEDIA_REQUEST_CODE);

Проблема в том, что на устройствах Nexus S и Galaxy S по умолчанию используется единственная ориентация для намерения ACTION_IMAGE_CAPTURE - альбомная. Если я снимаю фотографию в портретном режиме, эта фотография сохраняется в повернутом файле «взятого фото».

Эта проблема появляется только на устройствах Samsung Galaxy S (Galaxy S и Nexus S), на других устройствах, которые я пытался сделать, автоповорот зависит от ориентации во время съемки изображения.

Я буду очень признателен за любую помощь по этому вопросу.

Ответы [ 2 ]

3 голосов
/ 30 сентября 2011

Из того, что я могу сказать, это происходит потому, что значение MediaStore.Images.ImageColumns.ORIENTATION не задается этим намерением.Он устанавливается, когда все идет через обычное приложение камеры.

Однако на моем Nexus S файл все еще получает правильные данные EXIF.Таким образом, вы можете получить ориентацию следующим образом:

ExifInterface exif = new ExifInterface("filepath");
exif.getAttributeInt(ExifInterface.TAG_ORIENTATION,
                     ExifInterface.ORIENTATION_NORMAL);

Затем вы можете использовать ContentResolver.update , чтобы добавить правильные данные ОРИЕНТАЦИИ.Вам просто нужно перевести параметры ориентации ExifInterface в повернутые градусы.

Другой вариант - создать собственное действие для управления оборудованием камеры и записать файл.Затем вы будете отслеживать вращения и записывать значение в метаданные при сохранении захваченного изображения.Поскольку приложение «Камера» является частью Android, вы, вероятно, сможете скопировать и изменить его без особых усилий.

0 голосов
/ 31 августа 2011

Я испытал эту проблему также на телефонах Samsung, включая Galaxy Ace (я назвал действие камеры совершенно другим методом, чем ваш)

Я предполагаю, что это проблема уровня ОС / оборудования. Вы пытались сделать снимок с помощью родного приложения камеры, и вам удалось получить правильную ориентацию в этом приложении?

...