我知道之前已经讨论了很多次,而且我已经看了很多问题和许多答案,而且由于我缺乏理解或我的设备,我试过它们无济于事。此外,大多数问题现在都已过时。我有纵向图像旋转到风景的经典问题。
无论如何,我有一个我正在使用的自定义相机。这是我主要活动中的一个功能:
public static int getImageOrientation(String imagePath){
int orientation = -1;
try {
ExifInterface exif = new ExifInterface(imagePath);
int exifOrientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION,
ExifInterface.ORIENTATION_NORMAL);
switch (exifOrientation) {
case ExifInterface.ORIENTATION_ROTATE_270:
orientation = 270;
break;
case ExifInterface.ORIENTATION_ROTATE_180:
orientation = 180;
break;
case ExifInterface.ORIENTATION_ROTATE_90:
orientation = 90;
break;
case ExifInterface.ORIENTATION_NORMAL:
orientation = 0;
break;
default:
break;
}
} catch (IOException e) {
Log.e("LOG_TAG", "Unable to get image exif orientation", e);
}
return orientation;
}
这个函数在我的onactivityresult中被调用:
String abspath = data.getExtras().getString(EXTRA_IMAGE_PATH);
mMediaUri = Uri.fromFile(new File(abspath));
rotation = getImageOrientation(abspath);
现在,我要做的是,我将旋转存储在后端,以便当图像出现在列表视图中时,它将知道是否要旋转。问题是-1一直被返回。我能做错什么?我只是想知道照片是以肖像还是风景拍摄的。
答案 0 :(得分:1)
看起来exif.getAttributeInt()返回的exifOrientation与case语句中列出的任何值都不匹配。 请先检查exifOrientation的值。
getAttributeInt(String tag,int defaultValue)返回指定标记的整数值,在本例中为TAG_ORIENTATION。如果JPEG文件中没有此类标记,或者该值无法解析为整数,则返回defaultValue。
我根据你的结果假设下面的事实:
您可以使用一些图像查看器工具查看它,例如Irfanview with plugin。