由于项目的需要,没有自定义拍照功能,仅仅调用了系统的拍照程序..但是出现了一个问题,就是拍照完成显示图片居然是被旋转的图片....
解决办法:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| /** * 获取图片的旋转角度,有些系统把拍照的图片旋转了,有的没有旋转 */ int degree = readPictureDegree(f.getAbsolutePath()); BitmapFactory.Options opts= new BitmapFactory.Options(); //获取缩略图显示到屏幕上 opts.inSampleSize= 2 ; Bitmap cbitmap=BitmapFactory.decodeFile(f.getAbsolutePath(),opts); /** * 把图片旋转为正的方向 */ Bitmap newbitmap = rotaingImageView(degree, cbitmap); iv.setImageBitmap(newbitmap); |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
| /** * 读取图片属性:旋转的角度 * @param path 图片绝对路径 * @return degree旋转的角度 */ public static int readPictureDegree(String path) { int degree = 0 ; try { ExifInterface exifInterface = new ExifInterface(path); int orientation = exifInterface.getAttributeInt(ExifInterface.TAG_ORIENTATION, ExifInterface.ORIENTATION_NORMAL); 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 ; } } catch (IOException e) { e.printStackTrace(); } return degree; } /* * 旋转图片 * @param angle * @param bitmap * @return Bitmap */ public static Bitmap rotaingImageView( int angle , Bitmap bitmap) { //旋转图片 动作 Matrix matrix = new Matrix();; matrix.postRotate(angle); System.out.println( "angle2=" + angle); // 创建新的图片 Bitmap resizedBitmap = Bitmap.createBitmap(bitmap, 0 , 0 , bitmap.getWidth(), bitmap.getHeight(), matrix, true ); return resizedBitmap; } |