android 自动相机 图片旋转问题,Android部分手机拍照后获取的图片被旋转问题的解决方法...
时间: 2023-11-26 08:03:18 浏览: 176
这个问题的原因是由于不同的设备在拍照后保存图片的方向不同,导致在显示图片时出现了旋转的情况。为了解决这个问题,可以通过以下方法进行处理:
1. 使用 ExifInterface 类
可以通过 ExifInterface 类读取图片的旋转角度信息,然后将图片进行相应的旋转。具体的代码如下:
```java
ExifInterface exif = new ExifInterface(photoPath);
int orientation = exif.getAttributeInt(ExifInterface.TAG_ORIENTATION, 1);
Matrix matrix = new Matrix();
if (orientation == ExifInterface.ORIENTATION_ROTATE_90) {
matrix.postRotate(90);
} else if (orientation == ExifInterface.ORIENTATION_ROTATE_180) {
matrix.postRotate(180);
} else if (orientation == ExifInterface.ORIENTATION_ROTATE_270) {
matrix.postRotate(270);
}
Bitmap rotatedBitmap = Bitmap.createBitmap(bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);
```
2. 使用系统相机
在调用系统相机拍照时,可以通过设置 Camera.Parameters 属性来控制图片的旋转角度。具体的代码如下:
```java
Camera.Parameters parameters = mCamera.getParameters();
Camera.CameraInfo info = new Camera.CameraInfo();
Camera.getCameraInfo(cameraId, info);
int rotation = activity.getWindowManager().getDefaultDisplay().getRotation();
int degrees = 0;
switch (rotation) {
case Surface.ROTATION_0:
degrees = 0;
break;
case Surface.ROTATION_90:
degrees = 90;
break;
case Surface.ROTATION_180:
degrees = 180;
break;
case Surface.ROTATION_270:
degrees = 270;
break;
}
int result;
if (info.facing == Camera.CameraInfo.CAMERA_FACING_FRONT) {
result = (info.orientation + degrees) % 360;
result = (360 - result) % 360;
} else {
result = (info.orientation - degrees + 360) % 360;
}
mCamera.setDisplayOrientation(result);
parameters.setRotation(result);
```
以上两种方法都可以解决Android部分手机拍照后获取的图片被旋转问题。
阅读全文