此堆栈溢出错误有很多结果,但没有人符合我的情况。 :(
我想调整位图的大小,并且,我建立了一种方法来执行以下操作:
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);
}
我不知道这是否与例外有任何关系,有人可以帮助我吗?谢谢。