我知道网上有很多不同的教程可以教你如何实现裁剪,但是我很难将裁剪功能应用到我的项目中。我正在建立一个OCR应用程序,我使用onActivityresult来执行我的OCR。我不知道如何将裁剪功能添加到我的代码中。请帮忙。
这是我按下画廊的按钮。
findViewById(R.id.b1).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(intent, REQUEST_GALLERY);
}
});
这是我的相机按钮。
findViewById(R.id.imageButton).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String filename = System.currentTimeMillis() + ".jpg";
ContentValues values = new ContentValues();
values.put(MediaStore.Images.Media.TITLE, filename);
values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg");
imageUri = getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
Intent intent = new Intent();
intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
startActivityForResult(intent, REQUEST_CAMERA);
}
});
这是我的onActivityresult
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
case REQUEST_GALLERY:
if (resultCode == RESULT_OK) {
inspect(data.getData());
}
break;
case REQUEST_CAMERA:
if (resultCode == RESULT_OK) {
if (imageUri != null) {
inspect(imageUri);
}
}
break;
default:
super.onActivityResult(requestCode, resultCode, data);
break;
}
}
因为我将图像传递给“inspect”类,如何在将它们传递给inspect之前实现裁剪?
答案 0 :(得分:0)
你不应该在活动结果上做太多工作,你可以开始一个新的线程来做复杂的事情,并且使用rxjava很容易做到这一点。在你的情况下这样做:
Observable.just(imgUri)
.subscribeOn(Schedulers.io())
.map(uri -> MediaStore.Images.Media.getBitmap(getContentResolver(), uri))
.map(bitmap -> getCroppedImgAndReturnItsUri(bitmap))
.observeOn(AndroidSchedulers.mainThread())
.subscribe(uri -> {inspect(uri);}, throwable -> {})
不要忘记将这种一次性物品丢弃在活动停止处。