我正在尝试从媒体库中裁剪图像。我可以访问图像,启动默认裁剪工具,甚至保存裁剪后的图像结果。
然而,如果裁剪成功,我正在使用的意图将不会返回任何结果。
我的主要方法:
// Crop photo intent.
Intent intent = new Intent("com.android.camera.action.CROP", null);
intent.setData(uri);
intent.putExtra("outputX", outputX);
intent.putExtra("outputY", outputY);
intent.putExtra("aspectX", aspectX);
intent.putExtra("aspectY", aspectY);
intent.putExtra("scale", scale);
intent.putExtra("return-data", true);
intent.putExtra(MediaStore.EXTRA_OUTPUT, createTempCroppedImageFile());
intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());
// Publish intent to crop picture.
activity.startActivityForResult(intent, activity.CROP_PHOTO_REQUEST_CODE);
- OnActivityResult()方法 -
// Photo crop activity.
if (requestCode == CROP_PHOTO_REQUEST_CODE) {
if (resultCode == RESULT_OK) {
Log.d(TAG, "user cropped a photo");
signupScreen.setImage(new PhotoTool(this).getTempCroppedImageFileLocation());
} else
Log.d(TAG, "user cancelled photo crop");
}
如果我取消了裁剪活动,我会成功获得“用户取消的照片裁剪”消息。但是,如果我裁剪图像,新裁剪的图像将出现在目标目录中,但OnActivityResult()函数永远不会被调用。是什么给了什么?
看着LogCat,我发现每次保存裁剪的图像时,“JavaBinder”都会抱怨“Binding Transaction失败”。我知道这与内存有某种关系,但裁剪文件的大小只有24KB。
答案 0 :(得分:15)
发现此问题的问题。不幸的是,这是一个Android限制。
请参阅Android cropper cannot go beyond 256?
我已将裁剪图像的输出设置为400x400。不幸的是Android的默认裁剪器只能做256x256。这非常令人沮丧,特别是当没有关于限制的文档时。
答案 1 :(得分:1)
您是否在作物意图中调用setResult(int)
(link)?
<强>更新强>:\
发送RESULT_CANCELLED是默认值。除非你实施一些事情,否则它将一直被发回。
在您的裁剪意图中,当您完成编辑(即用户点击完成按钮或类似内容)后,该过程的一部分将调用setResult(RESULT_OK)
。
示例:
public void doneBTNPressed( View view ) {
if ( view.getId() == R.id.doneBTN ) {
this.isCropped = true;
}
}
@Override
protected void onPause() {
if ( this.isCropped ) {
setResult(RESUL_OK);
}
super.onPause();
}
该结果(RESULT_OK,加上你指定的另一个整数)被传递回调用Activity(假设使用了startActivityForResult())。根据您的需要,还有一些覆盖。在调用(父)活动中,您必须实现onActivityResultint,int,Intent)
以从退出活动中获取结果。
在上面提供的链接中,有一个标题为“开始活动和获得结果”的部分,它解释了从现有活动中获取信息的多种方法。