gpt4 book ai didi

android - 如何处理不支持 EXIF 方向数据的 Android 设备?

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:05:52 25 4
gpt4 key购买 nike

我正在 HTC Desire with Android 2.2 上测试我的应用程序。它完全按照我的意愿工作。我使用 Sherlock 包在旧设备上与新设备上具有相同的样式。

我的 AVD 设置为使用最新的 android,看起来也不错。然后我将它放在三星 Galaxy S2 上,当我处理相机和画廊图像时,它们旋转错误。它接缝三星上的某些东西(相机应用程序,android it self)没有或者它确实检查 EXIF 并且我的图像方向错误。纵向图像以横向加载,横向图像以纵向加载。

  1. 我想我需要以某种方式检查 EXIF 并忽略它以便按原样加载图像?
  2. 更大的问题是 - 如何知道是否有任何其他设备(一些 HTC,一些 HUAWEI 或任何)会出现类似的问题?我认为除了有 4 个屏幕尺寸组之外,所有 Android 设备的行为方式都相同......

谢谢。

最佳答案

没有任何代码很难说出发生了什么。

我找到的最简单的方法是读取 EXIF 信息并检查图像是否需要旋转。要阅读更多关于 Android 上的 ExifInterface 类的信息: http://developer.android.com/intl/es/reference/android/media/ExifInterface.html

也就是说,这里有一些示例代码:

/** An URI and a imageView */
public void setBitmap(ImageView mImageView, String imageURI){
// Get the original bitmap dimensions
BitmapFactory.Options options = new BitmapFactory.Options();
Bitmap bitmap = BitmapFactory.decodeFile(imageURI, options);
float rotation = rotationForImage(getActivity(), Uri.fromFile(new File(imageURI)));

if(rotation!=0){
//New rotation matrix
Matrix matrix = new Matrix();
matrix.preRotate(rotation);
mImageView.setImageBitmap(Bitmap.createBitmap(bitmap, 0, 0, reqHeight, reqWidth, matrix, true));
} else {
//No need to rotate
mImageView.setImageBitmap(BitmapFactory.decodeFile(imageURI, options));
}
}


/** Returns how much we have to rotate */
public static float rotationForImage(Context context, Uri uri) {
try{
if (uri.getScheme().equals("content")) {
//From the media gallery
String[] projection = { Images.ImageColumns.ORIENTATION };
Cursor c = context.getContentResolver().query(uri, projection, null, null, null);
if (c.moveToFirst()) {
return c.getInt(0);
}
} else if (uri.getScheme().equals("file")) {
//From a file saved by the camera
ExifInterface exif = new ExifInterface(uri.getPath());
int rotation = (int) exifOrientationToDegrees(exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL));
return rotation;
}
return 0;

} catch (IOException e) {
Log.e(TAG, "Error checking exif", e);
return 0;
}
}

/** Get rotation in degrees */
private static float exifOrientationToDegrees(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;
}
return 0;
}

如果出现错误,您将在 rotationForImage 函数上看到“Error checking EXIF”日志。

关于android - 如何处理不支持 EXIF 方向数据的 Android 设备?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12577451/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com