我正在努力将图像自动旋转到图像视图中。
问题编号。 1
根据我的观察,如果图像旋转到任何角度,那么在将图像显示到图像视图时,android会根据旋转角度旋转图像。
让我们说..如果图像旋转到180度CW,那么android将图像重新旋转180度以正确显示图像。我不想要android旋转图像。
甚至画廊显示图像原样。设备库在显示图像时没有进行任何操作。
问题编号。 2 三星设备的另一个问题。三星默认捕捉角度是风景。意味着如果我在横向模式下捕获任何照片,则图像旋转将为0.但是如果我在纵向模式下捕获图像,则图像旋转值将为90.问题从此处开始。现在,如果尝试显示该肖像图像android图像视图将该图像旋转到90度。因此,图像将以水平方式显示,而不是垂直显示。
作为解决方案,我可以从图像中读取旋转度并在显示之前进行计算。
问题编号。 3
但是当用户从Google云端硬盘中选择图片时,我将无法获得所选图片的元数据。所以没有它,我怎么能决定图像应该在很大程度上旋转。
我期待以下问题的解决方案。
答案 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;
}