Фотографии, сделанные в портретной ориентации, сохраняются в альбомной ориентации.

Я пытался использовать намерения Android ACTION_IMAGE_CAPTURE и ACTION_GET_CONTENT, чтобы либо сделать снимок, либо выбрать его. Проблема, с которой я сталкиваюсь, заключается в том, что когда я пытаюсь сделать снимок, используя намерение фотографии Android в портретном режиме, он сохраняет его в альбомной ориентации.

Я пытаюсь сохранить Bitmap правильно ориентированной фотографии из строки URI.

Я нашел этот вопрос: Android Camera Intent Сохранение пейзажного изображения при съемке портрета, это та же проблема, что и у меня, но ответ неполный и не работает для меня. Например, что такое resizedBitmap, opts и file Uri.getPath()?


person lschlessinger    schedule 22.06.2014    source источник
comment
Кажется, название наоборот? Он сохраняется в альбомной ориентации, когда снимается в портретном режиме - точно так же, как в связанном вопросе, не так ли?   -  person Alex Cohn    schedule 22.06.2014
comment
Да, вы абсолютно правы - глупая ошибка.   -  person lschlessinger    schedule 22.06.2014
comment
Это абсолютно законно и даже предпочтительно задавать такие вопросы в форме комментария к ответу, который является неполным или не кажется ясным или не работает для вас.   -  person Alex Cohn    schedule 22.06.2014
comment
@AlexCohn хорошо, даже если ответ кажется неполным? Я просто прокомментировал пост.   -  person lschlessinger    schedule 23.06.2014
comment
@lschessinger: вы видите, что это законно и эффективно!   -  person Alex Cohn    schedule 24.06.2014


Ответы (1)


Что ж, некоторые камеры блокируют ландшафтный режим в качестве режима камеры по умолчанию (Samsung note 2), поэтому, если вы делаете снимок в портретном режиме, изображение все равно сохраняется в ландшафтном режиме. Большая часть камеры будет добавлять в изображение метаданные, такие как поставщик камеры, модель и т. д. Среди различных метаданных, которые могут присутствовать, нас интересуют данные вращения. Он определяет, на какие градусы нужно повернуть изображение. Чтобы узнать поворот, вы можете использовать класс ExifInterface.

resizedBitmap Изображения хранятся в виде растровых объектов в android. Поскольку изображение может быть большим, загрузка его целиком в память может привести к ошибке нехватки памяти и заставить ваше приложение потреблять больше памяти. Таким образом, растровое изображение сначала изменяется до нужного размера, а затем загружается в память.

opts Под opts вы должны иметь в виду метод BitmapFactory.Options. Это класс, который предоставляет методы для изменения поведения растровых изображений, например, делает его изменяемым (установлено значение true, вы можете применять к этому растровому изображению такие эффекты, как оттенки серого), найти его высоту и ширину в пикселях без загрузки в ОЗУ и т. д.

file Это класс, используемый для выполнения операций CRUD в любом файле, хранящемся в системе.

Uri.getPath() этот метод возвращает путь, по которому хранится ваше изображение, или null.

person Illegal Argument    schedule 22.06.2014
comment
Спасибо за ответ. Я имел в виду в отношении этого вопроса. Как бы я определил эти переменные, если бы у меня была фотография Uri? - person lschlessinger; 22.06.2014
comment
ответ в ссылке, которую вы дали, неполный. Вам просто нужно указать соответствующие значения переменных, которые он использовал. Я считаю, что достаточно изменить файловую переменную на Uri.getPath(). - person Illegal Argument; 22.06.2014
comment
Извините, если я что-то упустил, но где определены resizedBitmap и opts? - person lschlessinger; 22.06.2014