Изображение поворачивается при съемке фотографии в портретном режиме

Я реализовал пользовательскую камеру, с которой я делаю снимок, сохраняю его, вставляю в хранилище мультимедиа и отображаю его сразу после. Меня мучает проблема ориентации сохраненного изображения, я пытался исправить это с помощью ExifInterface, используя filePath напрямую или с использованием ориентации от поставщика контента изображений Android.

Ориентация всегда возвращается как 0. Я уже использовал:

Изображение Android выбрано из галереи Ориентация всегда 0: Exif TAG

   private int getExifOrientation(String pathName)
{
    //for complete info on EXIF orientation visit: http://sylvana.net/jpegcrop/exif_orientation.html
    ExifInterface exif=null;
    try {
        exif = new ExifInterface(pathName);
    } catch (IOException e) {
        // TODO Auto-generated catch block
        Log.e("ImagePreviewActivity", "Exif data of the image could not be retreived");
    }
    int orientation=exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, -1);
    return orientation;
}

private int getRotation(int orientation)
{
    int rotation=0;
    switch(orientation)
    {
        case ExifInterface.ORIENTATION_ROTATE_90:
            //orientation values is 6
            rotation=90;
            break;

        case ExifInterface.ORIENTATION_ROTATE_180:
            //orientation value is 3
            rotation=180;
            break;

        case ExifInterface.ORIENTATION_ROTATE_270:
            //orientation value is 8
            rotation=270;
            break;

        case -1:
            Log.d("ImagePreviewActivity","Error getting orientation from Exif data.");
            break;

        case 1:
            Log.d("ImagePreviewActivity", "Image is properly oriented");
            default:
                Log.d("ImagePreviewActivity", "The value of orientation is "+orientation);
    }
    return rotation;
}

private Bitmap rotateBitmap(String pathName,int rotation)
{
    Bitmap bmp=BitmapFactory.decodeFile(pathName);
    Matrix matrix=new Matrix();
    matrix.postRotate(90);
    //start from x=0,y=0 and filter=false
    Bitmap rotatedBitmap=Bitmap.createBitmap(bmp,0,0,bmp.getWidth(),bmp.getHeight(),matrix,false);
    return rotatedBitmap;
}

РЕДАКТИРОВАТЬ:

Выходное изображение отображается правильно, когда я делаю снимок в режиме Пейзаж, однако при съемке в портретном режиме оно возвращает повернутое изображение (на 90 градусов). В настоящее время я использую метод на основе EXIF.

1 ответ

Убедитесь, что путь, по которому вы передаете, не имеет "file://" в начале. ExifInterface не выдает ошибку или что-то еще, если ваш путь префикс, он просто возвращает значение по умолчанию для ориентации каждый раз.

Другие вопросы по тегам