1、问题
使用以下方式使用ImageView显示手机内存文件图片时会翻转90度
imageView.setImageBitmap(rotatedBitmap)
2、原因
Android中的图片旋转问题通常与图片的Exif信息有关。Exif是一种图像文件格式,它可以存储有关照片的元数据,例如拍摄时间、相机品牌、拍摄方向等。
某些相机应用程序在拍摄照片时会将拍摄方向信息保存到Exif数据中,因此在读取这些照片时,Android将根据Exif数据中的信息来旋转图片以确保它们正确显示。
当使用Android的相机应用程序拍摄照片时,它会根据设备的方向将照片保存在正确的方向上。例如,如果你将设备旋转到横向模式拍摄照片,那么照片将被保存为横向方向,并且Exif数据中将包含旋转方向信息。当你从文件中读取这些照片时,Android将使用Exif数据来旋转图片以确保它们正确显示。
3、解决方法
如果你的应用程序中读取的图片发生了旋转,你可以使用ExifInterface类来读取图片的Exif数据,并根据其中的旋转信息来旋转图片。例如,以下代码可以帮助你读取图片的Exif数据并旋转图片:
ExifInterface exif = new ExifInterface(filePath);
int orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_UNDEFINED);
Matrix matrix = new Matrix();
switch (orientation) {
case ExifInterface.ORIENTATION_ROTATE_90:
matrix.postRotate(90);
break;
case ExifInterface.ORIENTATION_ROTATE_180:
matrix.postRotate(180);
break;
case ExifInterface.ORIENTATION_ROTATE_270:
matrix.postRotate(270);
break;
default:
break;
}
Bitmap bitmap = BitmapFactory.decodeFile(filePath);
Bitmap rotatedBitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);
在这个例子中,我们首先使用ExifInterface类来读取图片的Exif数据,然后根据旋转信息创建一个旋转矩阵,最后使用Bitmap.createBitmap()方法来旋转图片。