处理图片会OOM(OutOfMemoryErrer)分析

Android程序处理图片常常会OOM,有时候我们处理2、3M的图片就会内存溢出。但是我们的手机还有更多的运存。

Android 虚拟机默认为每个应用分配16M堆内存。ps:google原生OS的默认值是16M,但是各个厂家的OS会对这个值进行修改。

我们在看下图片显示手机需要多大内存:当在界面显示图片时,需要的内存空间不是按图片的实际大小来计算的,而是按像素点的多少乘以每个像素点占用的空间大小来计算的。

像素表现有三种模式:

        1. ARGB_4444  :A(Alpha)透明度占4位精度,R(Red)红色占4位精度,G(Green)绿色占4位精度,B(Blue)蓝色占4位精度。总共占16位,正好2个字节。也就是一个像素占2个字节的内存。同时存储位图的透明度和颜色信息。图片质量较差。

        2.ARGB_8888  :  A(Alpha)透明度占8位精度,R(Red)红色占8位精度,G(Green)绿色占8位精度,B(Blue)蓝色占8位精度。也就是一个像素占4个字节的内存。同时存储位图的透明度和颜色信息。图片质量较好。

        3. RGB_565 : R(Red)红色占5位精度,G(Green)绿色占6位精度,B(Blue)蓝色占5位精度,一共是16位精度,总共2个字节。存储的只是颜色信息,没有透明度信息。

当前有一张图片,大小仅为1M,但是其规格(图片的像素)为3648*2736。

那么它在

ARGB_4444模式下是:3648*2736*2bytes=19961856bytes=19M。

ARGB_8888模式下是:3648*2736*4bytes=38M。

RGB_565模式下是:3648*2736*2bytes=19M。

所以在Android默认分配下处理内存16M不够用,有些厂商会自定义。一旦超出这个值就会内存溢出。

解决办法:等比缩放图片

假设:

图片的宽和高: 3648 * 2736

屏幕的宽和高: 320 * 480

计算缩放比:

宽度缩放比例: 3648 / 320 = 11

高度缩放比例: 2736 / 480 = 5

比较宽和高的缩放比例,哪一个大用哪一个进行缩放,因此我们采用11 作为该图片长和高的缩放比例。

计算缩放后的图片的宽和高:

宽=3648 / 11 = 331

高=2736 / 11 = 248

缩放后图片的宽和高: 331* 248

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值