游戏中最占内存的是图片,所以本篇主要讲图片的优化方式。

1、内存计算公式

    默认情况下,在cocos2d里面加载一张图片的时候,图片中每一个像素点使用4个byte(8位)来表示--分别代表red、green、blue和alpha透明通道。这个就简称RGBA8888(32-bit图)。因此使用默认的像素格式加载图片的话,内存消耗可以使用下面的公式计算:图片宽度 * 图片高度 * 每个像素点的位数 = 内存大小如:一张1024*1024的RGBA8888的图片占用的内存大小为 1024*1024*4 = 4M

2、通过修改像素格式优化内存大小和加载速度

    (1)RGBA8888(32-bit)RGBA 4个通道各占8位,如果想获得最好的图片质量,使用这种格式最靠谱,但他占用的内存会比16位的纹理多一倍,加载速度相对较慢。(2)RGBA4444(16-bit)RGBA 4个通道各占4位,他对每个通道都有不错的支持,还能保证相对良好的图片质量,以及加载速度和内存占用。(3)RGB5A1   (16-bit)RGB 3个通道各占5位,A通道仅占一位,RGB通道表现良好,A通道只有透明和不透明两种,加载速度和内存占用表现良好。(4)RGB565   (16-bit)RGB 3个通道分别占5、6、5位,没有A通道,在16为纹理中,图片质量最好。

3、TexturePacker

   使用图片打包工具(如:TexturePacker)把散图打包成一张大图,一方面可以节省内存,另一方面还可以提高加载速度。(1)抖动TP有一个特性叫“抖动”,他可以使得原本由于颜色数量减少(如:RGBA4444格式)而产生的失真问题得到改善。(2)NPOTNPOT是“non power of two”的缩写,即“不是2的幂”。cocos2d 2.x默认支持。如果纹理集使用NPOT的纹理,他允许TP更好的压缩纹理,因此会更少的浪费纹理图集的空白区域。NOPT是“non power of two”的缩写,译作“不是2的幂”。NPOT stands for “non power of two”. 在cocos2d1.x的时候,你必须在ccConfig.h文件中开启对NPOT的支持,但是,cocos2d 2.x就不需要了,它默认是支持NPOT的。所有3代(iphone 3GS)以后的ios设置都支持cocos2d 2.x(因为它们支持OpenGL ES2.0),所以也都能支持NPOT纹理。

如果纹理图集(texture atlas)使用NPOT的纹理,它将有一个具大的优势:它允许TP更好地压缩纹理。因此,我们会更少地浪费纹理图集的空白区域。而且,这样的纹理在加载的时候,会少使用1%到49%左右的内存。而且你可以使用TP强制生成NPOT的纹理。(你只需要勾选“allow free size”即可)

为什么要关心NPOT呢?因为苹果的OpenGL驱动有一个bug,导致如果使用POT的纹理,则会产生额外33%的内存消耗。

4、png、jpg、pvr

    (1)pvrpvr图像是专门为ios设备上面的powerVR图形芯片指定的图形容器,可以直接加载到显卡上,而不需经过中间的转化。(2)pngcocos加载png图片分两个阶段:①从图片文件中临时创建一个UIImage对象。②以这个创建好的UIImage对象来创建CCTexture2D对象。这意味着当一个纹理被加载的时候,在短时间内,他的内存占用会是自身内存的2倍。(由于cocos自动释放,临时创建的UIImage对象会被回收。)(3)jpgcocos加载jpg图片的时候会实时的转换为png格式的纹理,这意味着短时间内,他的内存占用会是自身的3倍,而且加载速度非常慢。

5、pvr.ccz

    pvr.ccz其实就是pvr图片的zip压缩包,程序读的时候会先解压出pvr资源,然后再读取pvr。不过由于压缩可以极大的减少图片体积,而且虽然多了解压过程也不会有特别多的cpu消耗,所以程序如果使用pvr图片的话大部分采用pvr.ccz格式。

6、PVRTC压缩

    pvr纹理支持pvrtc纹理压缩格式,他主要采用有损压缩。如果拿pvrtc图片和jpg图片对比的话,他只有jpg图片的中等质量,但是他最大的好处是可以不用再内存里面解压缩纹理。pvrtc2和pvrtc4是两种pvr压缩的图像格式,他们都是pvr文件。这两种图像格式比普通图像有更快的加载速度和更小的内存占用。pvrtc4:4字节每像素,良好的图片质量,占用内存仅为RBGA8888格式的1/8pvrtc2:2字节每像素,较差的图片质量,占用内存仅为RGBA8888格式的1/16

NOPT是“non power of two”的缩写,译作“不是2的幂”。NPOT stands for “non power of two”. 在cocos2d1.x的时候,你必须在ccConfig.h文件中开启对NPOT的支持,但是,cocos2d 2.x就不需要了,它默认是支持NPOT的。所有3代(iphone 3GS)以后的ios设置都支持cocos2d 2.x(因为它们支持OpenGL ES2.0),所以也都能支持NPOT纹理。

如果纹理图集(texture atlas)使用NPOT的纹理,它将有一个具大的优势:它允许TP更好地压缩纹理。因此,我们会更少地浪费纹理图集的空白区域。而且,这样的纹理在加载的时候,会少使用1%到49%左右的内存。而且你可以使用TP强制生成NPOT的纹理。(你只需要勾选“allow free size”即可)

图片格式及其内存占用相关推荐

  1. Android文件夹占用空间分析,关于Android中图片大小、内存占用与drawable文件夹关系的研究与分析...

    从上一篇文章<Android屏幕适配全攻略>写完之后,经常会有朋友问我这个问题:"能不能一个App只提供一套切图适应所有的分辨率呢?"我觉得有必要写一篇文章来研究一下这 ...

  2. Unity3D 图片空间和内存占用分析

    前言: Texture图片空间和内存占用分析.由于U3D并没有很好的诠释对于图片的处理方式,所以很多人一直对于图集的大小和内存的占用情况都不了解.在此对于U3D的图片问题做一个实际数据的分析.此前的项 ...

  3. 【Unity3D游戏开发】性能优化之Texture图片空间和内存占用分析(三七)

    Unity3D–Texture图片空间和内存占用分析 发表于2014年5月21日由陆泽西 Texture图片空间和内存占用分析.由于U3D并没有很好的诠释对于图片的处理方式,所以很多人一直对于图集的大 ...

  4. Unity3D–Texture图片空间和内存占用分析

    Texture图片空间和内存占用分析.由于U3D并没有很好的诠释对于图片的处理方式,所以很多人一直对于图集的大小和内存的占用情况都不了解.在此对于U3D的图片问题做一个实际数据的分析.此前的项目都会存 ...

  5. 关于Android中图片大小、内存占用与drawable文件夹关系的研究与分析

    从上一篇文章<Android屏幕适配全攻略>写完之后,经常会有朋友问我这个问题:"能不能一个App只提供一套切图适应所有的分辨率呢?"我觉得有必要写一篇文章来研究一下这 ...

  6. Delphi FMX正确加载图片最大限度减少内存占用(之一TBitmapSurface)

    Delphi FMX正确加载图片最大限度减少内存占用(之一TBitmapSurface) 国庆前,无意间发现App内存占用陡增,发现是几张4K图片(7680x4320像素)加载引发的(TImage.B ...

  7. Delphi FMX正确加载图片最大限度减少内存占用(之二TImageList)

    Delphi FMX正确加载图片最大限度减少内存占用(之二TImageList) 继上篇<Delphi FMX正确加载图片最大限度减少内存占用(之一TBitmapSurface)>之后,我 ...

  8. unity优化《二》--Texture图片空间和内存占用分析

    打包多种类型的项目,空项目和10张放在Resources文件夹中的图为比较案例.以下是比较数据. IPHONE: 1.空项目----空间占用量42.3MB----IPA大小10MB 2.10张1200 ...

  9. Android文件夹占用空间分析,关于Android中图片大小、内存占用和drawable文件夹研究分析...

    引用链接 结果分析 同一张图片,放在不同目录下,会生成不同大小的Bitmap Bitmap的长度和宽度越大,占用的内存就越大 图片在硬盘上占用的大小,与在内存中占用的大小完全不一样 下面我会对上面几个 ...

最新文章

  1. 何崚谈阿里巴巴前端性能优化最佳实践
  2. 一键编译php,编译安装php 附加一键安装php5.6.30脚本
  3. Linux 实时查看日志文件的 4 种方法
  4. Fiddler抓取HTTPS包
  5. 动态创建asp.net控件之我见
  6. url 函数 php,php中url处理函数总结
  7. win7系统锁定计算机设置方法
  8. Mybatis的动态sql语句的查询
  9. 面试题9:斐波那契数列
  10. java报错: 类重复: newemission.calculate_java当中的继承(一)
  11. atmega128 单片机 玩具电子琴 蜂鸣器 电子琴
  12. Android ViewPager实现3D画廊效果
  13. 【M365运维】匹配用户UPN和Email地址
  14. 计算机个人市场调查实验报告,市场调查实验报告(一)
  15. Canonical标签有没有必要使用呢? Canonical标签作用是什么
  16. Ubuntu Linux系统Google日语输入法跨平台版Mozc安装笔记
  17. [Excel]vlookup的内在逻辑以及模糊检索
  18. 为什么达芬奇能“艺工结合”,要从“T型设计”说起
  19. 从零开始学飞塔第一篇:飞塔防火墙基本上网配置(PPPoE拨号固定IP上网)FortiGate Broadband internet access
  20. 忘了账号——如何查看本地mysql账号

热门文章

  1. IMU数据仿真公式推导及代码实现
  2. Git统计一段时间内代码的修改量
  3. Maven的作用到底是什么?
  4. C语言头文件和源文件的关系
  5. 教你如何全面认识磁盘阵列柜
  6. pageInfo的转化,do转vo
  7. c语言凑数的不同种方法,凑数强化版【庆贺2021年5月9日母亲节】
  8. 第一批财务自由的90后,都做对了什么?
  9. Markdown Pad出现HTML渲染错误(HTML Rendering Error)的解决方法,Markdown Pad弹窗报错
  10. 计算机程序漏洞用英语怎么说,漏洞用英语怎么说