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

调用系统相机、图库并选择图片

2016-07-29 09:58 260 查看
相信很多学习android的朋友,都和我一样连一个简单的获取手机图片的无从知晓,于是借助于百度寻求帮助,于是乎有感写,这篇博客不仅仅是巩固自身的基础知识,希望能帮助到其他人。
Uri mPhotoUri;
private static final int REQUESTCODE_PICK = 0; // 相册选图标记
private static final int REQUESTCODE_TAKE = 1;  // 相机拍照标记
//如果不太明白Uri
//请查看链接:http://blog.csdn.net/sunny09290/article/details/7514963
1.调用系统相机
Intent intent=new Intent(MediaStore.ACTION_IMAGE_CAPURE)


//获取保存路径

intent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, mPhotoUri);//可以忽略

startActivityForResult(intent,REQUESTCODE_TAKE);//跳转相机

//从图片库获取图片
Intent intent;
if (Build.VERSION.SDK_INT < 19) {
intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("image/*");

} else {
intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
}
startActivityForResult(intent, REQUESTCODE_PICK);


//重写回调方法

@Override

public void onActivityResult(int requestCode, int resultCode, Intent data) {

if (resultCode == Activity.RESULT_OK) {//是否选中图片

switch (requestCode) {

case REQUESTCODE_PICK:// 直接从相册获取

Uri selectedImage = data.getData();
String[] filePathColumn = {MediaStore.Images.Media.DATA};

Cursor cursor = getContentResolver().query(selectedImage,
filePathColumn, null, null, null);
cursor.moveToFirst();

int columnIndex = cursor.getColumnIndex(filePathColumn[0]);
String picturePath = cursor.getString(columnIndex);
cursor.close();


// Bitmap bitmap = BitmapFactory.decodeFile(picturePath);

Bitmap bitmap = FileUtil.getSmallBitmap(picturePath);//压缩图片

setPotoFeedImageItem(bitmap);

break;

case REQUESTCODE_TAKE:// 调用相机拍照

if (resultCode == Activity.RESULT_OK) {
final Uri uri = mPhotoUri;
Log.e("resultCode", uri + "");
if (uri != null) {
processPicture(uri);
}
}
break;
}
}
super.onActivityResult(requestCode, resultCode, data);
}

/**
* 图片显示
*
* @param uri
*/
private void processPicture(Uri uri) {
final String[] projection = {MediaStore.Images.Media.DATA};
final Cursor cursor = managedQuery(uri, projection, null, null, null);
cursor.moveToFirst();
final int columnIndex = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
String imagePath = cursor.getString(columnIndex);
Debug.e("processPicture", imagePath);

Bitmap bitmap = FileUtil.getSmallBitmap(imagePath);//压缩图片

setPotoFeedImageItem(bitmap);

}


//将图片显示在控件上

privet void setPotoFeedImageItem(Bitmap bitmap){

ImageView acatarimg = (ImageView) findViewById(R.id.img);

acatarimg.setImageBitmap(bitmap);

}

下面的是一个压缩图片的工具类

public class FileUtil {

/**
* 裁剪图片方法实现
*
* @param uri
*/
public static void startPhotoZoom(Activity cot, Uri uri) {
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(uri, "image/*");
// crop=true是设置在开启的Intent中设置显示的VIEW可裁剪
intent.putExtra("crop", "true");
// aspectX aspectY 是宽高的比例
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
// outputX outputY 是裁剪图片宽高
intent.putExtra("outputX", 300);
intent.putExtra("outputY", 300);
intent.putExtra("return-data", true);
cot.startActivityForResult(intent, REQUESTCODE_CUTTING);
}
//计算图片的缩放值
public static int calculateInSampleSize(BitmapFactory.Options options,int reqWidth, int reqHeight) {
final int height = options.outHeight;
final int width = options.outWidth;
int inSampleSize = 1;

if (height > reqHeight || width > reqWidth) {
final int heightRatio = Math.round((float) height/ (float) reqHeight);
final int widthRatio = Math.round((float) width / (float) reqWidth);
inSampleSize = heightRatio < widthRatio ? heightRatio : widthRatio;
}
return inSampleSize;
}
// 根据路径获得图片并压缩,返回bitmap用于显示
public static Bitmap getSmallBitmap(String filePath) {
final BitmapFactory.Options options = new BitmapFactory.Options();
options.inJustDecodeBounds = true;
BitmapFactory.decodeFile(filePath, options);
// Calculate inSampleSize
options.inSampleSize = calculateInSampleSize(options, 480, 800);

// Decode bitmap with inSampleSize set
options.inJustDecodeBounds = false;

return BitmapFactory.decodeFile(filePath, options);
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  android 图片 手机