3

我正在尝试从媒体库中裁剪图像。我可以访问图像,启动默认裁剪工具,甚至可以保存裁剪后的图像结果。

但是,如果裁剪成功,我使用的意图将不会返回任何结果。

我的主要方法:

// 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”都会抱怨“Binder Transaction 失败”。我知道这在某种程度上与内存有关,但裁剪后的文件大小只有 24KB。

4

2 回答 2

15

发现这个问题的问题。不幸的是,这是一个 Android 限制。

看到Android 裁剪器不能超过 256?

我已将裁剪图像的输出设置为 400x400。不幸的是,Android 的默认裁剪器只能做 256x256。这非常令人沮丧,尤其是当没有关于限制的文档时。

于 2012-02-19T10:24:16.527 回答
1

您是否在作物意图中调用setResult(int)链接)?

更新:\

发送 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,加上您指定的另一个整数)被传递回调用活动(假设使用了 startActivityForResult())。还有一些覆盖,取决于您的需要。在调用(父)活动中,您必须 implelementonActivityResultint,int,Intent)才能从现有活动中获取结果。

在上面提供的链接中,有一个标题为“开始活动和获得结果”的部分,它解释了从现有活动中获取信息的多种方法。

于 2012-02-19T01:59:47.300 回答