Выбор изображения всегда дает пейзажное изображение


Я использовал следующий код, чтобы забрать изображение из галереи телефона:

Intent intent = new Intent();
  intent.setType("image/*");
  intent.setAction(Intent.ACTION_GET_CONTENT);
  startActivityForResult(Intent.createChooser(intent, "Select Picture"),
    USE_LIBRARY_PIC_REQUEST);

В onActivityResult (), он дает путь к файлу, я пытался получить растровое изображение с помощью filepath, но он всегда дает его в ландшафтном представлении. Есть ли способ получить это изображение в портретном виде всегда? Код для получения filepath:

Uri selectedImageUri = data.getData();
    selectedImagePath = getPath(selectedImageUri);

Вот как я получил растровое изображение, используя путь к файлу:

Bitmap bmp=BitmapFactory.decodeFile(selectedImagePath);
1 2

1 ответ:

Чтобы получить исходное изображение, вы можете использовать этот метод.

public static Bitmap getBitmap(String uri, Context mContext) {

    Bitmap bitmap = null;
    Uri actualUri = Uri.parse(uri);
    BitmapFactory.Options options = new BitmapFactory.Options();
    options.inTempStorage = new byte[16 * 1024];
    options.inSampleSize = 2;
    ContentResolver cr = mContext.getContentResolver();
    float degree = 0;
    try {
        ExifInterface exif = new ExifInterface(actualUri.getPath());
        String exifOrientation = exif
                .getAttribute(ExifInterface.TAG_ORIENTATION);
        bitmap = BitmapFactory.decodeStream(cr.openInputStream(actualUri),
                null, options);
        if (bitmap != null) {
            degree = getDegree(exifOrientation);
            if (degree != 0)
                bitmap = createRotatedBitmap(bitmap, degree);
        }
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
    return bitmap;
}

public static float getDegree(String exifOrientation) {
    float degree = 0;
    if (exifOrientation.equals("6"))
        degree = 90;
    else if (exifOrientation.equals("3"))
        degree = 180;
    else if (exifOrientation.equals("8"))
        degree = 270;
    return degree;
}

public static Bitmap createRotatedBitmap(Bitmap bm, float degree) {
    Bitmap bitmap = null;
    if (degree != 0) {
        Matrix matrix = new Matrix();
        matrix.preRotate(degree);
        bitmap = Bitmap.createBitmap(bm, 0, 0, bm.getWidth(),
                bm.getHeight(), matrix, true);
    }

    return bitmap;
}