createBitmap方法中的IllegalArgumentException

时间:2014-07-04 05:59:15

标签: android

我正在开发一个应用程序,从图库中选择图像的颜色代码。该应用程序崩溃错误: java.lang.IllegalArgumentException:width和height必须是> 0

崩溃来自方法的这一部分:

int i = paramBitmap.getWidth();
int j = paramBitmap.getHeight();
float f1 = paramInt2 / i;
float f2 = paramInt1 / j;
Matrix localMatrix = new Matrix();
if (i > j) {
    localMatrix.postRotate(90.0F);
}
f1 = Math.min(paramInt2/i, paramInt1/j);
f2 = Math.min(paramInt1/i, paramInt2/j);
localMatrix.postScale(f1, f2);
return Bitmap.createBitmap(paramBitmap, 0, 0, i, j, localMatrix, true); // Crashes here

崩溃的原因是什么?请提供宝贵的意见。

2 个答案:

答案 0 :(得分:1)

<强>问题:

float f1 = newHeight / i;
float f2 = newWidth / j;

int newWidthnewHeight的精度小于float所以当你计算它时,它会返回0.所以不要让parameter int改为parameter float计算浮点数而不是整数。

<强>样品

private Bitmap getResizedBitmap(Bitmap bm, float newHeight, float newWidth)
{
    int i = bm.getWidth();
    int j = bm.getHeight();
    float f1 = newHeight / i;
    float f2 = newWidth / j;
    Matrix localMatrix = new Matrix();
    if (i > j) {
        localMatrix.postRotate(90.0F);
    }
    f1 = Math.min(newHeight/i, newWidth/j);
    f2 = Math.min(newHeight/i, newWidth/j);
    localMatrix.postScale(f1, f2);
    return Bitmap.createBitmap(bm, 0, 0, i, j, localMatrix, true); // Crashes here
}

答案 1 :(得分:0)

不是x必须&lt; bitmap.width()。它说x + width必须是&lt; = bitmap.width()

check this