我有一个MediaStore.Images.Media.DATA uri图片如何使用该uri获取MediaStore.Images.ImageColumns.ORIENTATION?我收到了NullPointerException。
以下是我的代码,
private int getOrientation(Context context, Uri photoUri) {
Log.v("orientatioon", "not crashed01");
Cursor cursor = context.getContentResolver().query(photoUri,
new String[] { MediaStore.Images.ImageColumns._ID,MediaStore.Images.ImageColumns.ORIENTATION }, null, null, null);
Log.v("orientatioon", "not crashed02");
cursor.moveToFirst();
Log.v("orientatioon", "not crashed 03");
int i=cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Images.ImageColumns.ORIENTATION));
Log.v("orientatioon", ""+i);
cursor.close();
return i;
}
我在cursor.moveToFirst()代码行中获得NullPointerException
。
答案 0 :(得分:19)
实际上两个答案都是正确的,并且must
可以同时使用。
/**
* @return 0, 90, 180 or 270. 0 could be returned if there is no data about rotation
*/
public static int getImageRotation(Context context, Uri imageUri) {
try {
ExifInterface exif = new ExifInterface(imageUri.getPath());
int rotation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_UNDEFINED);
if (rotation == ExifInterface.ORIENTATION_UNDEFINED)
return getRotationFromMediaStore(context, imageUri);
else return exifToDegrees(rotation);
} catch (IOException e) {
return 0;
}
}
public static int getRotationFromMediaStore(Context context, Uri imageUri) {
String[] columns = {MediaStore.Images.Media.DATA, MediaStore.Images.Media.ORIENTATION};
Cursor cursor = context.getContentResolver().query(imageUri, columns, null, null, null);
if (cursor == null) return 0;
cursor.moveToFirst();
int orientationColumnIndex = cursor.getColumnIndex(columns[1]);
return cursor.getInt(orientationColumnIndex);
}
private static int exifToDegrees(int exifOrientation) {
if (exifOrientation == ExifInterface.ORIENTATION_ROTATE_90) {
return 90;
} else if (exifOrientation == ExifInterface.ORIENTATION_ROTATE_180) {
return 180;
} else if (exifOrientation == ExifInterface.ORIENTATION_ROTATE_270) {
return 270;
} else {
return 0;
}
}
答案 1 :(得分:5)
请这样做。试一试
final Uri imageUri = data.getData();
String[] columns = {MediaStore.Images.Media.DATA, MediaStore.Images.Media.ORIENTATION};
Cursor cursor = getContentResolver().query(imageUri, columns, null, null, null);
if (cursor == null) {
return;
}
cursor.moveToFirst();
int columnIndex = cursor.getColumnIndex(columns[0]);
int orientationColumnIndex = cursor.getColumnIndex(columns[1]);
String filePath = cursor.getString(columnIndex);
int orientation = cursor.getInt(orientationColumnIndex);
Log.d(TAG, "got image orientation "+orientation);
答案 2 :(得分:4)
使用此method
获取方向
public static int getExifOrientation(String filepath) {// YOUR MEDIA PATH AS STRING
int degree = 0;
ExifInterface exif = null;
try {
exif = new ExifInterface(filepath);
} catch (IOException ex) {
ex.printStackTrace();
}
if (exif != null) {
int orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, -1);
if (orientation != -1) {
switch (orientation) {
case ExifInterface.ORIENTATION_ROTATE_90:
degree = 90;
break;
case ExifInterface.ORIENTATION_ROTATE_180:
degree = 180;
break;
case ExifInterface.ORIENTATION_ROTATE_270:
degree = 270;
break;
}
}
}
return degree;
}