如何防止imageview中的自动图像旋转?

时间:2017-07-19 06:55:08

标签: android android-imageview google-drive-android-api image-rotation auto-rotation

我正在努力将图像自动旋转到图像视图中。

问题编号。 1

根据我的观察,如果图像旋转到任何角度,那么在将图像显示到图像视图时,android会根据旋转角度旋转图像。

让我们说..如果图像旋转到180度CW,那么android将图像重新旋转180度以正确显示图像。我不想要android旋转图像。

甚至画廊显示图像原样。设备库在显示图像时没有进行任何操作。

问题编号。 2 三星设备的另一个问题。三星默认捕捉角度是风景。意味着如果我在横向模式下捕获任何照片,则图像旋转将为0.但是如果我在纵向模式下捕获图像,则图像旋转值将为90.问题从此处开始。现在,如果尝试显示该肖像图像android图像视图将该图像旋转到90度。因此,图像将以水平方式显示,而不是垂直显示。

作为解决方案,我可以从图像中读取旋转度并在显示之前进行计算。

问题编号。 3

但是当用户从Google云端硬盘中选择图片时,我将无法获得所选图片的元数据。所以没有它,我怎么能决定图像应该在很大程度上旋转。

我期待以下问题的解决方案。

  1. 如何处理三星设备的旋转?
  2. 如何从谷歌驱动器中选择的图像中获取旋转值?
  3. 计算旋转图像?
  4. 任何方式说安卓不要旋转图像?

1 个答案:

答案 0 :(得分:1)

您正在寻找ExifInterface。有一个支持版本和一个好的描述link

我不确定是否有任何方法可以避免自动旋转,但下面是用于检测图像旋转和设置正确旋转的示例代码。希望这会有所帮助。

            ExifInterface exif = new ExifInterface(path);
            int orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL);
            Matrix matrix = new Matrix();
            switch (orientation) {
                case ExifInterface.ORIENTATION_FLIP_HORIZONTAL:
                    matrix.setScale(-1, 1);
                    break;
                case ExifInterface.ORIENTATION_ROTATE_180:
                    matrix.setRotate(180);
                    break;
                case ExifInterface.ORIENTATION_FLIP_VERTICAL:
                    matrix.setRotate(180);
                    matrix.postScale(-1, 1);
                    break;
                case ExifInterface.ORIENTATION_TRANSPOSE:
                    matrix.setRotate(90);
                    matrix.postScale(-1, 1);
                    break;
                case ExifInterface.ORIENTATION_ROTATE_90:
                    matrix.setRotate(90);
                    break;
                case ExifInterface.ORIENTATION_TRANSVERSE:
                    matrix.setRotate(-90);
                    matrix.postScale(-1, 1);
                    break;
                case ExifInterface.ORIENTATION_ROTATE_270:
                    matrix.setRotate(-90);
                    break;
            }