Android createBitmap创建大尺寸图像时,内存溢出out of memory(OOM)

publicvoidSaveBitmap(Bitmapbmp){Bitmapbitmap=Bitmap.createBitmap(2000,2000,Config.RGB... public void SaveBitmap(Bitmap bmp)
{
Bitmap bitmap = Bitmap.createBitmap(2000, 2000, Config.RGB_565);
//运行到这里会提示出错OOM,但是将尺寸改为Bitmap.createBitmap(200, 200, Config.RGB_565)便不会出错,所以是在创建图像的时候便出现了内存溢出,无关recycle()的事。

Canvas canvas = new Canvas(bitmap);
canvas.drawBitmap(bmp, 0, 0, null);
canvas.save(Canvas.ALL_SAVE_FLAG);
canvas.restore();
..............
}

目前网上关于该类问题的解决办法大多都是压缩图像,但是本人目前的这个安卓应用程序要求不可以对图像进行压缩。另有说自定义堆内存,但貌似有人回应堆内存不能有效解决该问题。。。有没有哪位大神知道该怎样解决啊?小妹无限感激,涕零,涕零~~~
展开
 我来答
过璞Va
推荐于2018-05-13 · TA获得超过1967个赞
知道小有建树答主
回答量:328
采纳率:100%
帮助的人:303万
展开全部
BitmapFactory.Options bfOptions=new BitmapFactory.Options();
bfOptions.inDither=false;//使图片不抖动。不是很懂
bfOptions.inPurgeable=true;//使得内存可以被回收
bfOptions.inTempStorage=new byte[12 * 1024]; //临时存储
File file = new File(path);//path:图片的绝对地址
FileInputStream fs=null;
try {
fs = new FileInputStream(file);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
Bitmap bmp = null;
if(fs != null) {
try {
bmp = BitmapFactory.decodeFileDescriptor(fs.getFD(), null, bfOptions); //这样莫非就让bmp到了临时存储的位置?
} catch (IOException e) {
e.printStackTrace();
}finally{
if(fs!=null) {
try {
fs.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

}
转的。
http://wenku.baidu.com/view/c7b20053ad02de80d4d840f9.html
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
雪鹰翔天
2013-08-26 · TA获得超过165个赞
知道小有建树答主
回答量:416
采纳率:0%
帮助的人:317万
展开全部
不能对图像压缩,那只能分割图像了吧,用到那个就把哪个load到内存里,这样节省内存。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
shen6983846
2013-08-26 · TA获得超过383个赞
知道小有建树答主
回答量:229
采纳率:0%
帮助的人:257万
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式