您的位置:首页 > 移动开发 > Android开发

关于android中调用系统拍照,返回图片是旋转90度..

2014-07-11 15:00 549 查看
由于项目的需要,没有自定义拍照功能,仅仅调用了系统的拍照程序..但是出现了一个问题,就是拍照完成显示图片居然是被旋转的图片....

解决办法:
/**
* 获取图片的旋转角度,有些系统把拍照的图片旋转了,有的没有旋转
*/
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);


01
/**
02
*
读取图片属性:旋转的角度
03
*
@param path 图片绝对路径
04
*
@return degree旋转的角度
05
*/
06
public
static
int
readPictureDegree(String
path) {
07
int
degree
=
0
;
08
try
{
09
 
ExifInterface
exifInterface =
new
ExifInterface(path);
10
 
int
orientation
= exifInterface.getAttributeInt(ExifInterface.TAG_ORIENTATION,ExifInterface.ORIENTATION_NORMAL);
11
 
switch
(orientation)
{
12
 
case
ExifInterface.ORIENTATION_ROTATE_90:
13
degree
=
90
;
14
break
;
15
 
case
ExifInterface.ORIENTATION_ROTATE_180:
16
degree
=
180
;
17
break
;
18
 
case
ExifInterface.ORIENTATION_ROTATE_270:
19
degree
=
270
;
20
break
;
21
 
}
22
}
catch
(IOException
e) {
23
 
e.printStackTrace();
24
}
25
return
degree;
26
}
27
/*
28
*
旋转图片
29
*
@param angle
30
*
@param bitmap
31
*
@return Bitmap
32
*/
33
public
static
Bitmap
rotaingImageView(
int
angle
,Bitmap bitmap) {
34
  
//旋转图片
动作
35
  
Matrix
matrix =
new
Matrix();;
36
  
matrix.postRotate(angle);
37
  
System.out.println(
"angle2="
+
angle);
38
  
//
创建新的图片
39
  
Bitmap
resizedBitmap = Bitmap.createBitmap(bitmap,
0
,
0
,
40
bitmap.getWidth(),
bitmap.getHeight(),matrix,
true
);
41
  
return
resizedBitmap;
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐