Android相机图像高度和宽度返回不正确

时间:2017-04-05 11:08:57

标签: android android-fragments android-imageview

在我的项目中,我想选择图像到图库并在回收视图中添加这些图像。 Hovewer当我选择垂直手机相机拍照时,它返回 反向高度和宽度。水平相机图像变为真实。顺便说一下,当有人从某个地方发送垂直图像时,它将返回true。我看到日志,它说:  D/height : 2322 , D/width: 4128用于垂直图像。但事实恰恰相反。

这是我的获取高度和宽度代码:

public int drawableWidthFromPath(String path,int width)throws IOException{

        File imgFile = new File(path);
        int newWidth=0;

        if(imgFile.exists())
        {
            BitmapFactory.Options options = new BitmapFactory.Options();
            options.inJustDecodeBounds = true;
            BitmapFactory.decodeFile(imgFile.getAbsolutePath(), options);
            int imageHeight = options.outHeight;
            int imageWidth = options.outWidth;


            Log.d("height", String.valueOf(imageHeight));
            Log.d("width", String.valueOf(imageWidth));


            newWidth = width*imageWidth/imageHeight;

        }


        return newWidth;
    }

此代码适用于:水平外包图像,垂直外包图像,水平相机图像,但不适用于垂直相机图像。顺便说一下我试试

Bitmap x = BitmapFactory.decodeFile(imgFile.getAbsolutePath());
x.getHeight();
x.getWidth();

但结果是一样的。这是我的一些事情: wrong size picture true size here

我看看twitter照片选择它显示图片完全正确。我的问题在哪里感谢

1 个答案:

答案 0 :(得分:0)

这是解决方案:

        switch(orientation) {

            case ExifInterface.ORIENTATION_ROTATE_90:
                selectedBitmap =rotateImage(selectedBitmap, 90);
                break;

            case ExifInterface.ORIENTATION_ROTATE_180:
                selectedBitmap =  rotateImage(selectedBitmap, 180);
                break;

            case ExifInterface.ORIENTATION_ROTATE_270:
                selectedBitmap =  rotateImage(selectedBitmap, 270);
                break;

            case ExifInterface.ORIENTATION_NORMAL:
                selectedBitmap =  rotateImage(selectedBitmap, 0);

            default:
                break;
        }