com.android.camera.action.CROP棒

时间:2014-09-27 12:37:23

标签: android android-intent crop

我开始遵循意图:

            Intent cropIntent = new Intent("com.android.camera.action.CROP");
            cropIntent.setDataAndType(data.getData(), "image/*");
            cropIntent.putExtra("crop", "true");
            cropIntent.putExtra("outputX", wallWidth);
            cropIntent.putExtra("outputY", wallHeight);
            cropIntent.putExtra("aspectX", wallWidth);
            cropIntent.putExtra("aspectY", wallHeight);
            cropIntent.putExtra("scale", true);
            cropIntent.putExtra("scaleUpIfNeeded", true);
            cropIntent.putExtra("return-data", true);
            cropIntent.putExtra("noFaceDetection", true);

在我的情况下,wallWidth和wallHeight是960/800然后这个意图停留在裁剪(这个加载圆圈旋转整个时间)。 如果我输入大约400或更少的东西输出它完美的工作。 我怎样才能解决这个问题?因为我想要一个具有更高分辨率的位图作为输出。

1 个答案:

答案 0 :(得分:-1)

使用Uri的大图片,使用Bitmap的小图片。这里你需要使用Uri。

关键代码如下:

private static final String IMAGE_FILE_LOCATION = "file:///sdcard/temp.jpg";//temp file
private Uri imageUri = Uri.parse(IMAGE_FILE_LOCATION);//The Uri to store the big bitmap

startPhotoZoom(data.getData());

public void startPhotoZoom(Uri uri) {
	Intent intent = new Intent("com.android.camera.action.CROP");
	intent.setDataAndType(uri, "image/*");
	intent.putExtra("crop", "true");
	intent.putExtra("aspectX", 1);
	intent.putExtra("aspectY", 1);
	intent.putExtra("scale", true);
	intent.putExtra("outputX", 500);
	intent.putExtra("outputY", 500);
	intent.putExtra("noFaceDetection", true);
	intent.putExtra("return-data", false);
	intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
	intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());
	startActivityForResult(intent, Constant.CROP_IMAGE);
}

Bitmap bitmap = decodeUriAsBitmap(imageUri);

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