Photo picker. Portrait turns to landscape

 ̄綄美尐妖づ 提交于 2019-12-24 00:22:49

问题


How to pick an image from gallery (SD Card) for my app?

I have implemented the second answer (With the downsampling). When I select an image in portrait, the image will be shown in landscape mode.. Does anybody know why this is? And how to fix this? Thanks in advance!

P.s. Sorry I've made a new topic out of this but the poster protected his topic against newbies like me :)


回答1:


You have to get the exif rotation of the pic, like this and arrange youur bitmap accordingly

public static int getExifRotation(String imgPath) 
{
    try 
    {
        ExifInterface exif = new ExifInterface(imgPath);
        String rotationAmount = exif.getAttribute(ExifInterface.TAG_ORIENTATION);
        if (!TextUtils.isEmpty(rotationAmount)) 
        {
            int rotationParam = Integer.parseInt(rotationAmount);
            switch (rotationParam) 
            {
                case ExifInterface.ORIENTATION_NORMAL:
                    return 0;
                case ExifInterface.ORIENTATION_ROTATE_90:
                    return 90;
                case ExifInterface.ORIENTATION_ROTATE_180:
                    return 180;
                case ExifInterface.ORIENTATION_ROTATE_270:
                    return 270;
                default:
                    return 0;
            }
        } 
        else 
        {
            return 0;
        }
    }
    catch (Exception ex) 
    {
        return 0;
    }
}

get the path of the picture

public String getPath(Uri uri) {
    String[] projection = { MediaStore.Images.Media.DATA };
    Cursor cursor = managedQuery(uri, projection, null, null, null);
    int column_index = cursor
            .getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
    cursor.moveToFirst();
    return cursor.getString(column_index);
}

Thin make a matrix and use bitmap constructor that uses matrix

Matrix matrix = new Matrix();
matrix.preRotate(90); 
// or
matrix.postRotate(90);

so inside your onActivityResult you should have something like this

 Uri selectedImageUri = data.getData();

                selectedImagePath = getPath(selectedImageUri);
                orientation = getExifRotation(selectedImagePath);


                Matrix matrix = new Matrix();
                matrix.postRotate(90);
               if(orientation == 90){
                   bitmap = Bitmap.createBitmap(bitmap, 0, 0, 
                            bitmap.getWidth(), bitmap.getHeight(), 
                            matrix, true);}

make sure you resample your image first though, so how he has it in his answer first and then do this



来源:https://stackoverflow.com/questions/16949001/photo-picker-portrait-turns-to-landscape

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!