IllegalArgumentException:创建位图时宽度和高度必须> 0

时间:2018-09-09 13:45:31

标签: java android bitmap

此堆栈溢出错误有很多结果,但没有人符合我的情况。 :(

我想调整位图的大小,并且,我建立了一种方法来执行以下操作:

    public static Bitmap resizeBitmap(Bitmap image, float size, Bitmap backgroundImg) {

    int bitmapWidth = image.getWidth();
    int bitmapHeight = image.getHeight();

    float scaleWidth = (backgroundImg.getWidth() * size) / bitmapWidth;
    float scaleHeight = (float) (image.getHeight() / image.getWidth()) * scaleWidth;

    Matrix matrix = new Matrix();
    matrix.postScale(scaleWidth, scaleHeight);

    Log.d("===>", "bitmapWidth: " + bitmapWidth + " bitmapHeight: " +   bitmapHeight);

    return Bitmap.createBitmap(image, 0, 0, bitmapWidth, bitmapHeight, matrix, true);
}

崩溃发生在Bitmap.createBitmap()中,如下所示:

    java.lang.IllegalArgumentException: width and height must be > 0
    at android.graphics.Bitmap.createBitmap(Bitmap.java:810)
    at android.graphics.Bitmap.createBitmap(Bitmap.java:789)
    at android.graphics.Bitmap.createBitmap(Bitmap.java:720)
    at com.watermark.androidwm.utils.BitmapUtils.resizeBitmap(BitmapUtils.java:154)

此方法可以根据另一个图像的大小(backgroundImg)调整输入位图的大小。我可以确保输入的位图(图像)不为空,并且日志显示为:

D/===>: bitmapWidth: 1808 bitmapHeight: 1678

显然,宽度和高度大于0 。我不知道此方法有什么问题,我尝试了很多次,发现如果我将更大的图像(1024x839等)用作输入位图,该方法将崩溃。如果我将小图像加载为位图,则该方法效果很好。

我从可绘制资源中加载输入位图,如下所示:

    private Bitmap getBitmapFromDrawable(@DrawableRes int imageDrawable) {
         return BitmapFactory.decodeResource(context.getResources(), imageDrawable);
}

我不知道这是否与例外有任何关系,有人可以帮助我吗?谢谢。

0 个答案:

没有答案