如何从图库和相机中裁剪图像

时间:2018-02-06 09:05:46

标签: android android-camera gallery crop

我知道网上有很多不同的教程可以教你如何实现裁剪,但是我很难将裁剪功能应用到我的项目中。我正在建立一个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之前实现裁剪?

1 个答案:

答案 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 -> {})

不要忘记将这种一次性物品丢弃在活动停止处。