将大图像保存为PNG

时间:2012-10-26 10:18:52

标签: java android bitmap out-of-memory

我刚刚遇到了一个棘手的问题......

这是我的故事:

我的设备是三星Galaxy Note,通常情况下,它会以 3264 * 2448 像素的分辨率拍摄照片。我喜欢精美的图片,以便找到详细的信息,但在这里我讨厌它,因为它在Android中处理起来很大。我可以阅读并显示这个大分辨率的图像,我需要在它上面画线,然后我需要将图片和线条保存到png。 我的头痛是我的Android总是给我出于memery异常,当我试图创建一个像这样的可变位图时:

    Bitmap bmp = Bitmap.createBitmap(3264, 2448, Config.RGB_565);
    Canvas cv = new Canvas(bmp);
    //draw a line and save and restore canvas
    // I found an alternative solution yet proven to be uncorrect:
    myImageView.setDrawingCacheEnabled(true);
    myImageView.buildDrawingCache(true);
    Bitmap bmp = myImageView.getDrawingCache();
    //save bmp to png

bmp.width * bmp.height * 4 > getScaledMaximumDrawingCacheSize()

异常跳出来。我测试了myImageView.measure(...)myImageView.layout(...),但对我来说不起作用。 (当我使用较小的图像测试相同的代码时,情况很好)

任何专家都知道如何解决这个问题或者向我提出解决方案?谢谢!

1 个答案:

答案 0 :(得分:1)

也许不是最终解决方案,但您是否尝试增加堆大小?

对于Android 2.2或更低版本:

dalvik.system.VMRuntime.getRuntime().setMinimumHeapSize(sizeInBytes);

对于Android 2.3 or or higher versions

android:largeHeap="true"