OutOfMemoryError:位图大小超过加载DICOM图像时的VM预算

时间:2012-05-09 07:24:24

标签: android out-of-memory dicom

我有以下代码,我从另一个应用程序

    public static Bitmap createBitMap(DicomObject dcmObj) {
    short[] image = dcmObj.getShorts(Integer.parseInt("7FE00010", 16));
    float wc = dcmObj.getFloat(Integer.parseInt("00281050", 16));
    float ww = dcmObj.getFloat(Integer.parseInt("00281051", 16));

    Bitmap bitMap = Bitmap.createBitmap(dcmObj.getInt(Tag.Columns), dcmObj
            .getInt(Tag.Rows), Bitmap.Config.ARGB_8888);
            bitMap.copyPixelsFromBuffer(LocalImport.makeBuffer((localImport
            .applyWindowing(image, wc, ww)), dcmObj.getInt(Tag.Columns),
            dcmObj.getInt(Tag.Rows)));
    return bitMap;
}

我要做的是从SD卡加载一些Dicom图像读取属性并将其显示在网格中。 上面的函数适用于应用程序,但是当我将相同的代码集成到我的应用程序时,它会崩溃。 我试过调试,但变量的值是相同的。

2 个答案:

答案 0 :(得分:0)

在对Android进行更改之前,分配大于VM限制的缓冲区的唯一方法是在本机代码中分配它们。在本机代码中,您可以为Android下的Linux系统分配尽可能多的内存。我已经使用自己的应用程序对此进行了测试,并分配了大于150MB的位图。然后,管理本机代码中的位图将需要编写代码,该代码将位图的“视图”呈现为由Java管理的显示大小的图像。

答案 1 :(得分:0)

崩溃是因为主要ui中的动画占用了大量内存。 我已复制代码的示例应用程序dint有任何动画。

猜测增加模拟器中分配的内存大小可以解决问题(dint尝试一下)。

但至少我知道这不是因为我没有做过任何解除分配或逻辑错误..

感谢所有人的帮助:)