系统接口调用-关于调用图库并裁剪图片

2015/01/20 17:26
阅读数 1.4K

一. 实现代码

调用系统相册

代码:

Intent intent = new Intent(Intent.ACTION_GET_CONTENT, null);
intent.setType("image/*");
intent.putExtra("crop", "true");
intent.putExtra("aspectX", 2);
intent.putExtra("aspectY", 1);
intent.putExtra("outputX", 600);
intent.putExtra("outputY", 300);
intent.putExtra("scale", true);
intent.putExtra("return-data", false);
intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());
intent.putExtra("noFaceDetection", true); // no face detection
startActivityForResult(intent, CHOOSE_PICTURE);

调用系统裁剪图片

代码:

private void cropImageUri(Uri uri, int outputX, int outputY, int requestCode) {
		Intent intent = new Intent("com.android.camera.action.CROP");
		intent.setDataAndType(uri, "image/*");
		intent.putExtra("crop", "true");
		intent.putExtra("aspectX", 2);
		intent.putExtra("aspectY", 1);
		intent.putExtra("outputX", outputX);
		intent.putExtra("outputY", outputY);
		intent.putExtra("scale", true);
		intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
		intent.putExtra("return-data", false);
		intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());
		intent.putExtra("noFaceDetection", true); // no face detection
		startActivityForResult(intent, requestCode);
	}


处理并显示裁剪后的图片

代码

 在onActivityResult处理

switch (requestCode) {
		case CHOOSE_PICTURE:
			cropImageUri(imageUri, 800, 400, CROP_PICTURE);
			break;
		case CROP_PICTURE:
			if (imageUri != null) {
				Bitmap bitmap = decodeUriAsBitmap(imageUri);
				imageView.setImageBitmap(bitmap);
			}
			break;
		default:
			break;
		}

图片处理代码:

private Bitmap decodeUriAsBitmap(Uri uri) {
		Bitmap bitmap = null;
		try {
			bitmap = BitmapFactory.decodeStream(getContentResolver()
					.openInputStream(uri));
		} catch (FileNotFoundException e) {
			e.printStackTrace();
			return null;
		}
		return bitmap;
	}

二.分析说明

关于裁剪的参数说明

SetExtra DataType Description
Crop String Signals the crop feature
aspectX int Aspect Ratio
aspectY int Aspect Ratio
outputX int Width of output created from this intent
outputY int Heigh of output created from this intent
scale boolean Should it scale
Return-data boolean Return the bitmap with Action=inline-data by using the data.
data Parcelable Bitmap to process,you may provide it a bitmap.
circleCrop String If this string is not null,it will provide some circular crop.
MediaStore.EXTRA_OUTPUT(output) URI  set this URi to a File.

data和MediaStore.EXTRA_OUTPUT都是可选的传入数据选项,你可以选择设置data为Bitmap,或者将相应的数据与URI关联起来,你也可以选择是否返回数据(return-data: true)。由于android资源限制,在选择返回图片资源时,android会返回一个压缩处理的小图(此为系统控制-大图容易造成内存溢出),如果想要一个高质量的图片,可以如上述代码中,直接返回uri,根据uri创建需要的图片。

展开阅读全文
打赏
0
8 收藏
分享
加载中
mark
2015/08/17 11:30
回复
举报
liqiuzuo博主

引用来自“colorchenvip”的评论

switch (requestCode) {
case CHOOSE_PICTURE:
cropImageUri(imageUri, 800, 400, CROP_PICTURE);
break;
case CROP_PICTURE:
if (imageUri != null) {
Bitmap bitmap = decodeUriAsBitmap(imageUri);
imageView.setImageBitmap(bitmap);
}
break;
default:
break;
}
这里的imageUri 怎么获得??
回调中返回的Intent中带有这个uri数据
2015/08/10 19:11
回复
举报
switch (requestCode) {
case CHOOSE_PICTURE:
cropImageUri(imageUri, 800, 400, CROP_PICTURE);
break;
case CROP_PICTURE:
if (imageUri != null) {
Bitmap bitmap = decodeUriAsBitmap(imageUri);
imageView.setImageBitmap(bitmap);
}
break;
default:
break;
}
这里的imageUri 怎么获得??
2015/08/06 16:52
回复
举报
更多评论
打赏
3 评论
8 收藏
0
分享
返回顶部
顶部