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 中的比例因子。而且我不确定你是否想在这里进行缩放 - 我不知道为什么代码要查看密度,但这样做可能是错误的。
对于裁剪图像,我使用的是 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 中的比例因子。而且我不确定你是否想在这里进行缩放 - 我不知道为什么代码要查看密度,但这样做可能是错误的。