2012-10-26 67 views
9

我刚刚encontered一个棘手的问题......保存大型图像PNG

这里是我的故事:

我的设备三星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(...),没有为我工作。 (事情很好,当我用较小的图像测试相同的代码时)

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

+0

你有没有计算认为,规模和质量的位图所需的内存。无论您正在开发的平台如何,它都很大,但是如果您不小心管理位图对象,则在受限的内存设备上发现更麻烦。 – paulkayuk

+1

你可能想看看http://stackoverflow.com/questions/10993568/android-image-file-size-limit-and-how-to-handle-large-images – erbsman

+0

你可能想尝试第一块将大的位图分成几块,然后仔细地绘制并对齐它们上的线条。然后,您需要将小部分放回完整的大位图。 – dumbfingers

回答

1

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

对于Android 2.2或更低版本:

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

对于Android的2.3 or or higher versions

android:largeHeap="true"