Как проверить, была ли фотография сделана в ландшафтном или портретном режиме на Android?

Я новичок в Android. Я пытаюсь сделать приложение с функцией захвата фотографий внутри. Проблема в неправильном повороте фото. Если я сделаю фото в ландшафтном режиме, то будет хорошо, а в портретном режиме поворот фото будет неверным. У меня такой вопрос: могу ли я проверить, сделана ли фотография в альбомном/портретном режиме? Потому что, когда я проверил LogCat, я вижу тег с именем «CameraEngine», и он говорит о вращении: 0 или 90. Было бы здорово, если бы я мог получить такую ​​​​информацию о камере с помощью кода.


person zacess    schedule 16.07.2012    source источник
comment
вы хотите знать сразу после того, как вы сделаете снимок с камеры или пока вы выбираете это изображение из галереи?   -  person sarabhai05    schedule 09.10.2012


Ответы (3)


Вы можете сравнить ширину и высоту изображения:

Bitmap bmp = your photo;

if(bmp.getWidth() > bmp.getHeight())
{
   // landscape
}else
{
   // portrait
}
person Dmytro Danylyk    schedule 16.07.2012

Вы не можете проверить в Android, была ли фотография сделана специально с помощью PhoneGape 2.9 и более поздних версий.

Потому что вам нужно извлечь эту информацию из свойства EXIF, хранящегося на сделанной фотографии, а Android даже не записывает ориентацию в это свойство.

вы можете обратиться к этому ответу на вопрос ниже для получения дополнительной информации: -rotated">canvas drawImage() с фотографиями, сделанными на iphone в альбомной ориентации, повернуты

person ghost rider3    schedule 24.01.2014

Это должно делать то, что вам нужно. Он возвращает ориентацию в виде угла (0/90/180/270):

private int getOrientation(Uri aUri, ContentResolver aRslv) {
    Cursor _cursor = aRslv.query(aUri,
            new String[] { MediaStore.Images.ImageColumns.ORIENTATION },
            null, null, null);

    if (_cursor != null) {
        try {

            if (_cursor.moveToFirst()) {
                return _cursor.getInt(0);
            } else {
                return -1;
            }
        } finally {
            _cursor.close();
        }
    } else {
        return 0;
    }
}
person Stevie    schedule 16.07.2012
comment
Спасибо за ваш ответ. Я пытался вызвать его внутри onActivityResult, но результат всегда возвращал 0. Правильно ли я поступил? пожалуйста помоги - person zacess; 17.07.2012
comment
Получаете ли вы ненулевой курсор из ContentResolver? - person Stevie; 17.07.2012
comment
Да, я получил такой курсор: android.content.ContentResolver$CursorWrapperInner@405273f0. Я также пытался распечатать _cursor.getInt(0), он всегда возвращает 0. - person zacess; 18.07.2012