我正在尝试在Android中扩展可伸缩图像查看器以并排使用两个图像。为此,我正在使用Bitmap.createBitmap(int, int, Bitmap.Config)
。不幸的是,这似乎使VM崩溃了。
该代码是
protected void combineBitmaps() {
image0Width = bitmap0.getWidth();
image0Height = bitmap0.getHeight();
image1Width = bitmap1.getWidth();
image1Height = bitmap1.getHeight();
//These methods just get correct values for image[0|1][Width|Height].
int width = getCanvasWidth();
int height = getCanvasHeight();
//THIS LINE CRASHES
Bitmap bitmap_tmp = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
bitmap = bitmap_tmp;
Canvas combination = new Canvas(bitmap);
combination.drawBitmap(bitmap0, 0f, getImage0VertOffset(), null);
combination.drawBitmap(bitmap1, image0Width, getImage1VertOffset(), null);
}
我从
getCanvasWidth()
得到的值是2464,从getCanvasHeight()
得到的值是2048。我得到的异常是Unable to start activity ComponentInfo{com.tse.scview/com.tse.scview.ScalableViewWrapper}: android.view.InflateException: Binary XML file line #8: Error inflating class com.tse.scview.ScalableFacingPageView
其中
com.tse.scview.ScalableFacingPageView
是我们正在构造的类(构造函数调用此函数)。我已经从这一行中隔离了所有内容(将位图分配给类位图,获取宽度和高度函数等),以确定实际上是导致问题的Bitmap.createBitmap。不幸的是,我无法解决问题所在。
更新:作为健全性检查,我为宽度和高度输入了较小的值(12和13 ...为什么不这样)。现在可以使用了。因此,这是一个内存问题,这对我们来说是一个痛苦,但可以有效地回答这个问题。
最佳答案
如果我正确阅读您的代码并提出问题,则位图为2464 x 2048 x 4字节。那是16兆字节。您正在创建其中两个。那是32 MB。