`
yistn
  • 浏览: 6529 次
  • 性别: Icon_minigender_2
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

Bitmap那些事之内存占用计算和加载注意事项

阅读更多
前言:本来我是做电视应用的,但是因为公司要出手机,人员紧张,所以就抽调我去支援一下,谁叫俺是雷锋呢!大笑我做的一个功能就是处理手机中的应用ICON,处理无非就是美化一下,重新与底板进行合成和裁剪,用到了很多Bitmap的知识。本来之前一直想写一些关于Bitmap的博客,正好这是个机会,因此Bitmap那些事系列博客诞生了。这个系列我会把学习Bitmap的一些知识发布出来供大家参考和交流。

        在手机中图片一般都是指Bitmap图片,为什么要说Bitmap呢?因为大家在开发应用的时候,都会使用一些图片来表现UI,用户也喜欢看图片,看文字获取信息太慢并且不直观,如果美工设计的好,看图片基本上不怎么看你的文字内容就知道你要表达什么,例如所有的购物网站都会编辑很多商品的配图来呈现给用户,由此可见图片在应用程序中的常见和重要。只要说到图片就不能离开如何避免OOM这个主题,因为在处理很多图片时很容易出现OOM,那么学习图片处理就显得尤为重要了,下面就让我们一步一步学习图片的相关知识。

Bitmap图片占用内存计算:

        Bitmap图片在加载到内存的时候是按照:宽*高*像素点位数来计算的。你可以把图片看成是由width行、height列的矩阵组成,每一个矩阵元素代表一个像素点,每一个像素点都是1byte整数倍的数据,这个数据越大,表示的色彩就越丰富,图片的显示质量就越高。Bitmap中有一个枚举类Config用来配置图片的压缩格式,代表每个像素是用多大的数据来存储的,数值越大能够存储的颜色信息就越多,也就越丰富,显示效果也就越好。Config.ALPHA_8是1 byte,Config.RGB_565和Config.ARGB_4444都是2 bytes,Config.RGB_565没有Alpha值所以多用来配置没有透明度的图片,Config.ARGB_8888是4 bytes,一般图片都是按照这个来配置的。下面是获取配置的代码:

static int getBytesPerPixel(Config config) {
    if (config == Config.ARGB_8888) {
        return 4;
    } else if (config == Config.RGB_565) {
        return 2;
    } else if (config == Config.ARGB_4444) {
        return 2;
    } else if (config == Config.ALPHA_8) {
        return 1;
    }
    return 1;
}
使用图片你需要注意哪些:


1、android系统自身的问题。android系统给每一个应用分配了一定的内存空间,分配了多少要看厂家和机型,数值可以通过Runtime类获取,Runtime.getRuntime()获取实例,然后通过maxMemory()方法获取系统可为APP分配的最大内存,totalMemory() 获取APP当前所分配的内存heap空间大小,freeMemory()获取当前可用的内存,当被耗尽时会自动扩张,但是不会超过maxMemory。下图为google官网提供的不同分辨率下不同的dpi分配的最小内存;










2、需要多大的照片。很多图片其实在手机上显示的时候不需要完全把原图加载到内存中,比如我手机相机拍了一张照片是4208*3120的,加载到内存中占用的内存就是52M,这是很恐怖的,两张照片差不多就把你的app内存给耗光了。一般情况下你都需要对需要加载的图片进行处理,这个处理主要是减小图片尺寸,降低分辨率,比如你的控件显示就是100*100的大小,那你就要把图片缩小到100*100。



3、及时释放内存。安卓2.3.3(API级别10)之前,Bitmap像素数据和Bitmap对象是分开存储的,像素数据是存储在native memory中,对象存储在Dalvik heap中,native memory中的像素数据不是以一种可预见的方式释放,可能导致应用程序暂时超过其内存限制和崩溃,所以在Android2.3.3(API 10)之前你必须要调用recycle()方法来释放掉内存避免出现OOM,当然前提是确定这个bitmap不再使用,否则会出现 "Canvas: trying to use a recycled bitmap". 在Android3.0(API 11)之后,Bitmap的像素数据和Bitmap对象一起存储在Dalvik heap中,所以我们不用手动调用recycle()来释放Bitmap对象,内存的释放都交给垃圾回收器来做。



        以上是学习Bitmap的一些基础知识和加载到手机内存中需要注意的事项,下一篇博客我会写如何更好的加载Bitmap,怎样省内存,怎样高效。谢谢大家的浏览,写的不好的地方和有任何疑问请留言或者更快的与我交流请添加:coder_online公众号,这里不仅有我的文章,还有我的小伙伴们的,各种技术分享,不妨你来看看,我们期待你的到来。也可以扫描下面的二维码,duang的一下就找到我们了。。。。。。。



                                               
分享到:
评论

相关推荐

    处理bitmap内存溢出问题

    处理bitmap内存溢出问题

    bitmap内存测试实践

    测试图片占用的内存大小,测试空bitmap和一张真实图片的内存大小对比,测试bitmap内存释放,测试bitmap优化后占内存大小等,理清bitmap到底怎么一回事,主要的类是BitmapDemo.java,csdn博客讲解:...

    VC加载BitMap图像

    本软件使用CStatic控件,加载相应的bitmap图像!

    android高效加载Bitmap

    归纳总结: 1. 从缓存中读取图片:先从内存缓存中读取。 若是从内存中读取到的Bitmap为空,则在磁盘缓存中读取。...计算合适比例,读取适屏的bitmap 4.检查ImageView与任务线程的一致性 5.最后Hanlder更新UI

    Bitmap加载、变换、显示图片

    Bitmap的使用,加载Drawable、Assert、SDcard上的图片,进行变换、压缩等操作,Bitmap和Drawable相互转换,Bitmap和数组的相互转换。

    bitmap内存测试

    测试图片占用的内存大小,测试空bitmap和一张真实图片的内存大小对比,测试bitmap内存释放,测试bitmap优化后占内存大小等,理清bitmap到底怎么一回事,主要的类是BitmapDemo.java

    android bitmap outOfMemory解决方法

    android bitmap outofMemory 用来解决android中常见的bitmap outOfMemory

    android bitmap内存溢出

    设置inJustDecodeBounds为true后,decodeFile并不分配空间,但可计算出原始图片的长度和宽度,即opts.width和opts.height。有了这两个参数,再通过一定的算法,即可得到一个恰当的inSampleSize。

    bitmap内存管理

    bitmap内存管理 google官方提供的demo

    bitmap内存问题

    可以很好的出来android开发过程中,由bitmap导致的内存溢出的问题。

    Q695238 MFC bitmap图片加载 VC2010

    Q695238 MFC bitmap图片加载 VC2010 https://ask.csdn.net/questions/695238

    Android中Glide获取图片Path、Bitmap用法详解

    软件开发网在此之前给大家介绍过图片加载框架Glide的基本用法介绍,大家可以先参考一下,本篇内容更加深入的分析了Glide获取图片Path、Bitmap用法,以及实现的代码分析。 1. 获取Bitmap: 1)在图片下载缓存好之后...

    加载大图片的时候如何防止内存溢出

    android加载大图片的时候防止内存溢出的分析

    Android Bitmap详解及Bitmap的内存优化

    Android Bitmap详解及Bitmap的内存优化 一、Bitmap: Bitmap是Android系统中的图像处理的最重要类之一。用它可以获取图像文件信息,进行图像剪切、旋转、缩放等操作,并可以指定格式保存图像文件。 常用方法: ...

    bitmap浅谈

    主要讲解bitmap存储,压缩,占用内存,以及内存的优化

    解析Android开发优化之:对Bitmap的内存优化详解

    1) 要及时回收Bitmap的内存 Bitmap类有一个方法recycle(),从方法名可以看出意思是回收。这里就有疑问了,Android系统有自己的垃圾回收机制...所以,加载Bitmap到内存里以后,是包含两部分内存区域的。简单的说,一部分

    Bitmap压缩原理和理论分析.jpg

    1:介绍图片耗用内存资源原理,以及计算图片内存方法 2:Bitmap压缩图片基本手段和思路

    bitmap数据结构复制

    加深对bitmap数据结构的理解,bitmap数据位图内存指针数据的长度

    Bitmap图像转halcon图像

    机器视觉技术必备,从位图到halcon图像,bitmap图像转为halcon图像,bitmap to Hobject

    c#Bitmap类和Graphics类

    C#中的Bitmap类和Graphics类比较输出,对比相同和不同点

Global site tag (gtag.js) - Google Analytics