joshdholtz CropImageView createbitmap java.lang.IllegalArgumentException: x + 宽度必须 <= bitmap.width()

joshdholtz CropImageView createbitmap java.lang.IllegalArgumentException: x + width must be <= bitmap.width()

对于裁剪图像,我使用的是 joshholtz (https://github.com/joshdholtz/CropImageView) 的 CropImageView。但是我在 return 行之前的最后一行裁剪函数的 CreateBitmap 函数中收到 IllegalArgumentException 异常(说:x + 宽度必须 <= bitmap.width())。

public Bitmap crop(Context context) throws IllegalArgumentException {
        // Weird padding cause image size
        int weirdSidePadding = this.getWeirdSideMargin();
        int weirdVerticalPadding = this.getWeirdVerticalMargin();

        FrameLayout.LayoutParams params = (LayoutParams) mDaBox.getLayoutParams();

        // Getting crop dimensions
        float d = context.getResources().getDisplayMetrics().density;
        int x = (int)((params.leftMargin - weirdSidePadding) * d);
        int y = (int)((params.topMargin - weirdVerticalPadding) * d);
        int width = (int)((this.getWidth() - params.leftMargin - params.rightMargin) * d);
        int height = (int)((this.getHeight() - params.topMargin - params.bottomMargin) * d);

        Bitmap crooopppppppppppppppeed = Bitmap.createBitmap(mBitmap, x, y, width, height);

        return crooopppppppppppppppeed;
}

实际上我看过一些可能相同的问题,但不幸的是,它们与我的情况不一样,无法帮助我。

你能帮我渡过难关吗?

所以在 createBitmap 中,您使用的函数从原始位图的一个子部分创建位图。要使其工作,x+width 不能大于原始位图的宽度(y+height 相同)并且 x 和 y 必须都 >=0。这里不是这种情况。

我想我明白了这个函数想要做什么,但它就是错的。它似乎混淆了裁剪和缩放的概念。如果你想一次缩放和裁剪位图,你应该使用 createBitmap(Bitmap source, int x, int y, int width, int height, Matrix m, boolean filter) 和矩阵 m 中的比例因子。而且我不确定你是否想在这里进行缩放 - 我不知道为什么代码要查看密度,但这样做可能是错误的。