我读了很多关于inSampleSize OutOfMemory困境的讨论
无法得到一个好的解决方案,所以我问一个问题。
我当前正在加载一个inSampleSize = 4的位图
这将给我一个大小为648x388的位图
原始磁盘大小为2592x1592。
我在648x388位图上写文字并将其保存回磁盘 我在648x388上写,因为2592x1592给了我OutOfMemory。
它的工作方式是在while
循环中可以保存1-10个648x388位图。
我想更改此循环以保存1-10 2592x1592位图。
如何安全地装载2592x1592?
我不关心决议下降60%或更多
只要位图具有相同的大小2592x1592
有没有办法可以保持大小,但使Bitmap更薄,
在不降低质量的情况下去除颜色。
我的第一个想法就是这样,以获得我能得到的最大位图: 我没有对此进行测试,但感觉这是一种不好的方式
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++;
}
}
任何帮助都会受到影响。
答案 0 :(得分:2)
图像处理需要大量内存。你不能使用整个位图,只需在手机上修改它。为此使用Web服务。上传,处理,下载。抱歉,没有其他方法解码后的位图只占用大量内存。
顺便说一句,你无法捕获一个outofMemory Exception。该应用程序崩溃。
答案 1 :(得分:1)
Android中的流程大小存在严格限制,四个字节的四百万像素图像会自动(在许多设备上)完成所有这些操作,无需为您的程序留出任何空间。
我认为您需要做以下两件事之一:创建一个Web服务来在服务器/云中进行图像处理;或者通过直接操作数据而不是使用位图来学习“即时”进行图像处理。