android - Bitmap占用内存过大

查看:176
本文介绍了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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆