Android图片的压缩和Bitmap转化为String传输

一.图片占用内存的计算方法
单位:bit(位),byte(字节)
二进制数系统中,每个0或1就是一个位(bit),位是数据存储的最小单位。其中8bit就称为一个字节(Byte)。
计算机中的CPU位数指的是CPU一次能处理的最大位数。例如32位计算机的CPU一次最多能处理32位数据。

Android中的四种色彩格式:
1:ALPHA_8 占1个字节(此时图片只有alpha值,没有RGB值,一个像素占用一个字节)
2:ARGB_4444 占2个字节(这种格式的图片,看起来质量太差,已经不推荐使用。alpha(A)值,Red(R)值,Green(G)值,Blue(B)值各占4个bites,共16bites,即2个字节)
3:ARGB_8888 占4个字节(alpha(A)值,Red(R)值,Green(G)值,Blue(B)值各占8个bites,共32bites,即4个字节这是一种高质量的图片格式,电脑上普通采用的格式。它也是Android手机上一个BitMap的默认格式。)
4:RGB_565  占2个字节(一个像素占用2个字节,没有alpha(A)值,即不支持透明和半透明,Red(R)值占5个bites ,Green(G)值占6个bites  ,Blue(B)值占5个bites,共16bites,即2个字节.对于没有透明和半透明颜色的图片来说,该格式的图片能够达到比较的呈现效果,相对于ARGB_8888来说也能减少一半的内存开销。因此它是一个不错的选择。另外我们通过android.content.res.Resources来取得一个张图片时,它也是以该格式来构建BitMap的.
从Android4.0开始,该选项无效。即使设置为该值,系统任然会采用 ARGB_8888来构造图片)
(注:ARGB指的是一种色彩模式,里面A代表Alpha,R表示red,G表示green,B表示blue,其实所有的可见色都是红绿蓝组成的,所以红绿蓝又称为三原色。
ARGB分别是指:透明度 红色 绿色 蓝色)


Android中计算一张图片所占内存大小方法:图片长*宽*每个像素所占字节数(图片的长宽要以像素为单位:px)
在Android4.0之前,Bitmap的内存是分配在Native堆中,调用recycle()可以立即释放Native内存。
从Android4.0开始,Bitmap的内存就是分配在dalvik堆中,即JAVA堆中的,调用recycle()并不能立即释放Native内存,等gc。但是调用recycle()也是一个良好的习惯。
二.图片的压缩
几个概念常识:
2.1 图片保存为file时候的大小和其在流的形式的时候大小是一样的,转化为Bitmap也就是“位图”时候明显是要比前俩大得多。
2.2 Android中BitmapFactory.Options的理解:可以查看:http://blog.csdn.net/haozipi/article/details/47183543?ref=myread,他写的一系列的关于Options的文章,很有用
2.3 在实际开发中,有时候我们需求将文件转换为字符串,然后作为参数进行上传:参照:http://blog.csdn.net/jdsjlzx/article/details/44228935中具体操作
位图Bitmap转成字符串string与String字符串转换为bitmap图片格式;(在即时通信中的表情因为很小就可以用这种方法来实现)
将图片文件转化文String;
2.4  Android图片压缩分为“质量压缩”和“尺寸压缩”或者叫“采样率压缩”,其中前者的特点为:改变图片的质量,使存的file的大小变小从而带来上传时候文件变小。但是再次加载到内存中大小还是不变依然很大(和之前没压缩之前一样大);后者的特点为:
图片的像素减少了加载到内存中肯定较少了,从而避免了oom;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值