我正在尝试在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。

10-08 11:17