android - Bitmap占用内存过大
本文介绍了android - Bitmap占用内存过大的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
从图库中选择一张大概5兆的图片,然后根据Uri生成Bitmap对象,突然发现生成的Bitmap对象占用内存大小有40多M了,想知道这种情况正常吗?还有我要将这个Bitmap上传到服务器(是通过将Bitmap转换成String以参数的形式通过post上传),这么大也上传不了,压缩又会使图片变得不清晰,请问有什么好的解决办法吗?
public String pconvertIconToString(Bitmap bitmap) {
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.JPEG, 100, byteArrayOutputStream);
byte[] Fullfacephoto = byteArrayOutputStream.toByteArray();
return Base64.encodeToString(Fullfacephoto, Base64.DEFAULT);
}
requestParams.addBodyParameter("clientId", clientId);
requestParams.addBodyParameter("telephone", telephone);
requestParams.addBodyParameter("linkMan", linkMan);
requestParams.addBodyParameter("linkManSex", linkManSex.toString());
requestParams.addBodyParameter("shopName", shopName);
requestParams.addBodyParameter("country", country);
requestParams.addBodyParameter("province", province);
requestParams.addBodyParameter("city", city);
requestParams.addBodyParameter("area", area);
requestParams.addBodyParameter("detailAddr", detailAddr);
requestParams.addBodyParameter("busilicenceNo", busilicenceNo);
requestParams.addBodyParameter("shopDescription", shopDescription);
requestParams.addBodyParameter("categoryId", categoryId.toString());
//下面这些是要传的图片
requestParams.addBodyParameter("busilicenceImg", busilicenceImg);
requestParams.addBodyParameter("shopCoverImg", shopCoverImg);
requestParams.addBodyParameter("shopInsideImg_1", shopInsideImg_1);
requestParams.addBodyParameter("shopInsideImg_2", shopInsideImg_2);
通过上述方法将bitmap转换返回一个String作为参数传递,和其他参数一起传递的。请问有人这样上传过图片吗?
解决方案
一定要将图片读取到 Bitmap 吗?
显示的话,有 Uri 就可以直接显示了。然后文件的话可以直接转 byte 数组,比如:
File file = new File(path);
int size = (int) file.length();
byte[] bytes = new byte[size];
try {
BufferedInputStream buf = new BufferedInputStream(new FileInputStream(file));
buf.read(bytes, 0, bytes.length);
buf.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
不过标准做法还是用 File 或者 Uri 构造 MultiPart 的请求体来上传,建议还是和服务端讨论一下。
这篇关于android - Bitmap占用内存过大的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文