将大图保存为PNG格式

9

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

以下是我的故事:

我的设备是三星Galaxy Note,通常情况下,它以3264 * 2448像素的分辨率拍照。当我想要查找详细信息时,我喜欢清晰的图片,但在Android中处理这样巨大的图片时,我却讨厌它。我可以读取和显示这个大分辨率的图像,需要在其上绘制线条,然后需要将图片和线条保存为png格式。我的头疼之处就是我的Android总是给我内存不足异常,当我尝试创建可变位图时,就像这样:

    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

When the

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

异常跳出。我已经测试了myImageView.measure(...)myImageView.layout(...),但对我没有用。

当我使用更小的图片测试相同的代码时,一切都正常。

有没有专家能够解决这个问题或给我提供一个解决方案?谢谢!


你计算过保存这个尺寸和质量的位图所需的内存吗?无论你开发的平台是什么,它都非常庞大。但如果你没有仔细管理位图对象,在内存受限的设备上会更加麻烦。 - paulkayuk
1
你可能想看一下这个网址:http://stackoverflow.com/questions/10993568/android-image-file-size-limit-and-how-to-handle-large-images - Carl-Emil Kjellstrand
你可能想先将大位图分成几个块,然后仔细地在它们上面绘制和对齐线条。然后你需要将小块放回完整的大位图中。 - dumbfingers
听起来是个好主意,但它怎么工作呢?我的意思是,你有没有什么源代码或详细的东西?我在做这个方面遇到了困难... - user1745958
只需调整图像大小以适应当前显示。我用我的SurfaceView从画廊中绘制图像完成了这个操作。 - Trung Nguyen
1个回答

1
也许不是最终解决方案,但你尝试增加堆大小了吗?
对于Android 2.2或更低版本:
dalvik.system.VMRuntime.getRuntime().setMinimumHeapSize(sizeInBytes);

针对 Android 2.3 或更高版本

android:largeHeap="true"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接