不知道选错了什么,刚才编辑的文章一片乱码,,,重新来一次
本篇文章包括 1 调用系统相机相册 返回图片
2 返回图片显示 反转90°的解决办法
调用系统相机 或者 相册来 获取图片是一个比较经常遇到的问题,简单整理下,发上来
1 创建 文件夹,一般会为本应用创建一个文件夹,我们的图片也保存在该文件夹下
权限:
<!-- 在SDCard中创建与删除文件权限 -->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
<!-- 往SDCard写入数据权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
代码:
File tmpFile = new File(PublicContants.file_header);
if (!tmpFile.exists()) {
tmpFile.mkdir();
}
2 从相机或者系统相册获取图片
权限:
<!-- 调用相机和 相册的权限 -->
<uses-permission android:name="android.permission.CAMERA"/>
<uses-feature android:name="android.hardware.camera"/>
<uses-feature android:name="android.hardware.camera.autofocus"/>
---------------相机----------------
调用:
Intent intent = new Intent(
MediaStore.ACTION_IMAGE_CAPTURE);
//下面这句指定调用相机拍照后的照片存储的路径
String name = DateFormat.format("yyyyMMdd_hhmmss",
Calendar.getInstance(Locale.CHINA))
+ ".jpg";
takePicFile = new File(PublicContants.file_header+"/diary_pic_"+name+".jpg");
intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri
.fromFile(takePicFile));
startActivityForResult(intent, PublicContants.select_pic_from_take_pic_request_code);
返回:
在 OnActivityResult()中可以对刚才定义的文件进行读取操作
------------------相册---------------------
调用:
Intent intent = new Intent(Intent.ACTION_PICK, null);
intent.setDataAndType(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
"image/*");
startActivityForResult(intent, PublicContants.select_pic_from_sys_request_code);
返回:在 OnActivityResult()中
if(data != null){
Uri uri = data.getData();
Cursor cursor = this.getContentResolver().query(uri, null,
null, null, null);
cursor.moveToFirst();
// String imgNo = cursor.getString(0); // 图片编号
String imgPath = cursor.getString(1); // 图片文件路径
// String imgSize = cursor.getString(2); // 图片大小
// String imgName = cursor.getString(3); // 图片文件名
cursor.close();
}
ok,至此,已经可以将 得到的图片返回了,但是有一个问题,将得到的图片 在imageView控件上显示 竟然反转了90 °,,尼玛,,不用担心,我们有banfa
public class BitmapTool {
private BitmapTool(){}
private static BitmapTool tool;
public static BitmapTool getInstance(){
if(tool == null){
init();
}
return tool;
}
private static synchronized void init(){
tool = new BitmapTool();
}
/**
* 读取图片属性:旋转的角度
* @param path 图片绝对路径
* @return degree旋转的角度
*/
private 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 Bitmap getCorrectRotateBitmap(String path) {
int angle = readPictureDegree(path);
Bitmap bitmap = BitmapFactory.decodeFile(path);
//旋转图片 动作
Matrix matrix = new Matrix();;
matrix.postRotate(angle);
// 创建新的图片
Bitmap resizedBitmap = Bitmap.createBitmap(bitmap, 0, 0,
bitmap.getWidth(), bitmap.getHeight(), matrix, true);
return resizedBitmap;
}
}
通过 该工具类调用 产生的bitmap 就可以 正常显示了