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

一. 实现代码

调用系统相册

代码:java

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);

调用系统裁剪图片

代码:android

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);
	}


处理并显示裁剪后的图片

代码ide

 在onActivityResult处理
this

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;
		}

图片处理代码:spa

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建立须要的图片。code

相关文章
相关标签/搜索