public void startCropWorkerTask(
      int reqWidth,
      int reqHeight,
      RequestSizeOptions options,
      Uri saveUri,
      Bitmap.CompressFormat saveCompressFormat,
      int saveCompressQuality) {
    Bitmap bitmap = mBitmap;
    if (bitmap != null) {
      mImageView.clearAnimation();

      BitmapCroppingWorkerTask currentTask =
          mBitmapCroppingWorkerTask != null ? mBitmapCroppingWorkerTask.get() : null;
      if (currentTask != null) {
        // cancel previous cropping
        currentTask.cancel(true);
      }

      reqWidth = options != RequestSizeOptions.NONE ? reqWidth : 0;
      reqHeight = options != RequestSizeOptions.NONE ? reqHeight : 0;

      int orgWidth = bitmap.getWidth() * mLoadedSampleSize;
      int orgHeight = bitmap.getHeight() * mLoadedSampleSize;

      reqWidth = reqWidth < orgWidth ? reqWidth : orgWidth;
      reqHeight = reqHeight < orgHeight ? reqHeight : orgHeight;

      if (mLoadedImageUri != null
          && (mLoadedSampleSize > 1 || options == RequestSizeOptions.SAMPLING)) {
        mBitmapCroppingWorkerTask =
            new WeakReference<>(
                new BitmapCroppingWorkerTask(
                    this,
                    mLoadedImageUri,
                    getCropPoints(),
                    mDegreesRotated,
                    orgWidth,
                    orgHeight,
                    mCropOverlayView.isFixAspectRatio(),
                    mCropOverlayView.getAspectRatioX(),
                    mCropOverlayView.getAspectRatioY(),
                    reqWidth,
                    reqHeight,
                    mFlipHorizontally,
                    mFlipVertically,
                    options,
                    saveUri,
                    saveCompressFormat,
                    saveCompressQuality));
      } else {
        mBitmapCroppingWorkerTask =
            new WeakReference<>(
                new BitmapCroppingWorkerTask(
                    this,
                    bitmap,
                    getCropPoints(),
                    mDegreesRotated,
                    mCropOverlayView.isFixAspectRatio(),
                    mCropOverlayView.getAspectRatioX(),
                    mCropOverlayView.getAspectRatioY(),
                    reqWidth,
                    reqHeight,
                    mFlipHorizontally,
                    mFlipVertically,
                    options,
                    saveUri,
                    saveCompressFormat,
                    saveCompressQuality));
      }
      mBitmapCroppingWorkerTask.get().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
      setProgressBarVisibility();
    }
  }
Gets the cropped image based on the current crop window.<br>
If (reqWidth,reqHeight) is given AND image is loaded from URI cropping will try to use sample
size to fit in the requested width and height down-sampling if possible - optimization to get
best size to quality.<br>
The result will be invoked to listener set by {@link
#setOnCropImageCompleteListener(OnCropImageCompleteListener)}.

@param reqWidth the width to resize the cropped image to (see options)
@param reqHeight the height to resize the cropped image to (see options)
@param options the resize method to use on the cropped bitmap
@param saveUri optional: to save the cropped image to
@param saveCompressFormat if saveUri is given, the given compression will be used for saving
    the image
@param saveCompressQuality if saveUri is given, the given quality will be used for the
    compression.
core/src/main/java/com/theartofdev/edmodo/cropper/CropImageView.java