对于裁剪图像,我正在使用joshholtz(https://github.com/joshdholtz/CropImageView)的CropImageView。但是我在返回行之前的最后一行的裁剪函数的CreateBitmap函数中得到IllegalArgumentException异常(说:x + width必须是< = 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;
}
其实我看过一些可能相同的问题,但不幸的是,他们与我的情况不一样,无法帮助我。
你能帮助我过来这个障碍吗?
答案 0 :(得分:0)
因此,在createBitmap中,您正在使用的函数会从原始位图的子部分创建位图。为了使其工作,x +宽度可能不大于原始位图的宽度(对于y +高度相同),并且x和y必须都是> = 0。这不是这种情况。
我想我得到了这个功能正在尝试做的事情,但它错了。它似乎混淆了裁剪和缩放的想法。如果要一次缩放和裁剪位图,则应使用矩阵m中的比例因子的createBitmap(位图源,int x,int y,int width,int height,Matrix m,boolean filter)。而且我不确定你想要在这里进行扩展 - 我不知道为什么代码会考虑密度,但这可能是错误的。