0

我阅读了很多关于 inSampleSize OutOfMemory 困境的讨论。
无法得到一个好的解决方案,所以我问了一个问题。
我目前正在加载一个 inSampleSize=4 的位图。
这将给我一个大小为 648x388 的位图。
原始磁盘大小为 2592x1592。

我在 648x388 位图上写入文本并将其保存回磁盘。
我在 648x388 上写作,因为 2592x1592 给了我 OutOfMemory 。

它的工作方式是while循环保存 1-10 个 648x388 位图。
我想更改此循环以保存 1-10 个 2592x1592 位图。

如何安全加载 2592x1592?
我不在乎分辨率下降 60% 或更多。
只要位图具有相同的大小 2592x1592。
有没有办法可以保持尺寸但使位图更薄,
去除颜色而不会使质量变差。

我的第一个想法是这样来获得我能得到的最大位图:我没有测试过这个,但感觉这是一个不好的方法

boolean work = true;
int insample = 2;
BitmapFactory.Options options = new BitmapFactory.Options();
while(work){
    try{
    options.inSampleSize = insample;
        bitmap = BitmapFactory.decodeFile(filePath,options);
        work = false;
    }catch(Exception e){
        insample++;
    }
}

任何帮助都会很感激。

4

2 回答 2

1

图像处理需要大量内存。您不能使用整个位图,而只是在手机上对其进行修改。为此使用网络服务。上传、处理、下载。抱歉,没有其他方法解码位图只占用大量内存。

顺便说一句,您无法捕捉到 outOFMemory 异常。该应用程序只是崩溃。

于 2011-06-16T18:05:13.223 回答
1

Android 中的进程大小有一个硬性限制,一个像素为 4 个字节的 4 兆像素图像将自己(在许多设备上)全部命中,而您的程序没有任何空间。

我认为您将需要做以下两件事之一:创建一个 Web 服务以在服务器/云中进行图像处理;或者通过直接操作数据而不是使用位图来学习“即时”进行图像处理。

于 2011-06-16T18:06:39.143 回答