如何在android中裁剪部分图像文件?

时间:2016-11-16 10:32:57

标签: android opencv crop camera-api

我使用相机API2编写了一个相机应用程序。 我可以从具体的事情中拍照。然后我知道在我的图片中的特定位置有重要信息(我不需要选择重要区域,我已经知道哪个部分是至关重要的。)我想只有我的图片的重要部分并使用此部分我的OCR应用程序。 我的问题是如何分离图片的特定部分。有些人建议我使用com.android,camera.action.CROP裁剪拍摄的照片。但是我在许多地方读过,这个方法可能不适用于所有Android设备。 有谁知道我应该怎么做? android是否支持这样的动作? 在保存图片之前可以裁剪字节文件吗? 或者我应该使用像Open-CV这样的第三方库来完成这些工作。 提前致谢

2 个答案:

答案 0 :(得分:0)

如果您有起始点x和y以及图像的高度和宽度 或者你有四个点形成一个矩形用于copping图像然后你可以使用这段代码

   private void cropBitmap1(int startX, int startY, int width, int height, Bitmap bmp) {
// widht=x+x2 height=y+Y2
    Bitmap source = bmp;
    //Log.w("TAG","widths "+widths +" width"+width+"  heights"+heights+"  height"+height+" x"+startX +" y"+startY);
    Bitmap resized = Bitmap.createBitmap(source, startX, startY, width, height);
 //save the image or execute for ocr using tesseract
  }

如果您不知道这四点,那么请转到Opencv,以便您可以使用培训文件来获取这些点

答案 1 :(得分:0)

如果你想使用库,我会推荐 theartofdev 库。将此依赖项放入应用程序 gradle

implementation 'com.theartofdev.edmodo:android-image-cropper:2.7.0'

用于选择图片

      CropImage.activity().start(getContext(), this);

这将重定向到打开或捕获图像。用户可以裁剪它,之后可以很容易地获得结果

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE) {
        CropImage.ActivityResult result = CropImage.getActivityResult(data);
        if (resultCode == -1) {
            Uri resultUri = result.getUri();
            // TODO your stuff here. Cropped image will come here as resultant
        } else if (resultCode == CropImage.CROP_IMAGE_ACTIVITY_RESULT_ERROR_CODE) {
            Exception error = result.getError();
        }
    }
}

这是最简单的方法。您可以在此处裁剪任何图像。