代码: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