我正在尝试在Android中扩展可扩展的图像查看器以并排使用两个图像。为此,我使用Bitmap.createBitmap(int, int, Bitmap.Config)
。不幸的是,这似乎正在崩溃虚拟机。
代码是
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 ......为什么不呢)。它现在有效。所以这是一个RAM问题,这对我们来说很痛苦,但有效地回答了这个问题。
答案 0 :(得分:1)
如果我正在正确阅读您的代码和问题,则位图为2464 x 2048 x 4字节。那是16兆字节。而你正在创造其中两个。那是32兆字节。
答案 1 :(得分:0)
我已经读过,如果你使用OpenGL纹理,你可以为Bitmaps分配更多的内存,因为这不计入Android每个app限制的最大内存。另一种方法是在ndk中分配内存,这也不计入Android每个应用限制的最大内存。