如何从图库和相机中裁剪图像
Posted
技术标签:
【中文标题】如何从图库和相机中裁剪图像【英文标题】:How to crop images from gallery and camera 【发布时间】:2018-02-06 09:05:46 【问题描述】:我知道网上有很多不同的教程教你如何实现裁剪,但我无法将裁剪功能应用于我的项目。我正在构建一个 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;
因为我将我的图像传递给“检查”类,我如何在将它们传递给检查之前实现裁剪?
【问题讨论】:
【参考方案1】:你不应该在活动结果上做太多工作,你可以启动一个新线程来做复杂的事情,使用 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 -> )
别忘了在你的活动停止处丢弃这个一次性用品。
【讨论】:
谢谢。我对此很陌生,我应该在哪里粘贴这段代码?以及“不要忘记在活动停止时丢弃此一次性用品”是什么意思? 您可以在获取“case REQUEST_CAMERA:”之类的图像 uri 时粘贴此代码。你可以在这里找到 rxjava 文档:github.com/ReactiveX/RxJava。 “处置这个一次性”就像你应该在退出活动时取消回调。 我很抱歉,但还有其他更简单的方法可以实现吗?我很困惑以上是关于如何从图库和相机中裁剪图像的主要内容,如果未能解决你的问题,请参考以下文章