图片格式及其内存占用
游戏中最占内存的是图片,所以本篇主要讲图片的优化方式。
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”即可)
图片格式及其内存占用相关推荐
- Android文件夹占用空间分析,关于Android中图片大小、内存占用与drawable文件夹关系的研究与分析...
从上一篇文章<Android屏幕适配全攻略>写完之后,经常会有朋友问我这个问题:"能不能一个App只提供一套切图适应所有的分辨率呢?"我觉得有必要写一篇文章来研究一下这 ...
- Unity3D 图片空间和内存占用分析
前言: Texture图片空间和内存占用分析.由于U3D并没有很好的诠释对于图片的处理方式,所以很多人一直对于图集的大小和内存的占用情况都不了解.在此对于U3D的图片问题做一个实际数据的分析.此前的项 ...
- 【Unity3D游戏开发】性能优化之Texture图片空间和内存占用分析(三七)
Unity3D–Texture图片空间和内存占用分析 发表于2014年5月21日由陆泽西 Texture图片空间和内存占用分析.由于U3D并没有很好的诠释对于图片的处理方式,所以很多人一直对于图集的大 ...
- Unity3D–Texture图片空间和内存占用分析
Texture图片空间和内存占用分析.由于U3D并没有很好的诠释对于图片的处理方式,所以很多人一直对于图集的大小和内存的占用情况都不了解.在此对于U3D的图片问题做一个实际数据的分析.此前的项目都会存 ...
- 关于Android中图片大小、内存占用与drawable文件夹关系的研究与分析
从上一篇文章<Android屏幕适配全攻略>写完之后,经常会有朋友问我这个问题:"能不能一个App只提供一套切图适应所有的分辨率呢?"我觉得有必要写一篇文章来研究一下这 ...
- Delphi FMX正确加载图片最大限度减少内存占用(之一TBitmapSurface)
Delphi FMX正确加载图片最大限度减少内存占用(之一TBitmapSurface) 国庆前,无意间发现App内存占用陡增,发现是几张4K图片(7680x4320像素)加载引发的(TImage.B ...
- Delphi FMX正确加载图片最大限度减少内存占用(之二TImageList)
Delphi FMX正确加载图片最大限度减少内存占用(之二TImageList) 继上篇<Delphi FMX正确加载图片最大限度减少内存占用(之一TBitmapSurface)>之后,我 ...
- unity优化《二》--Texture图片空间和内存占用分析
打包多种类型的项目,空项目和10张放在Resources文件夹中的图为比较案例.以下是比较数据. IPHONE: 1.空项目----空间占用量42.3MB----IPA大小10MB 2.10张1200 ...
- Android文件夹占用空间分析,关于Android中图片大小、内存占用和drawable文件夹研究分析...
引用链接 结果分析 同一张图片,放在不同目录下,会生成不同大小的Bitmap Bitmap的长度和宽度越大,占用的内存就越大 图片在硬盘上占用的大小,与在内存中占用的大小完全不一样 下面我会对上面几个 ...
最新文章
- 何崚谈阿里巴巴前端性能优化最佳实践
- 一键编译php,编译安装php 附加一键安装php5.6.30脚本
- Linux 实时查看日志文件的 4 种方法
- Fiddler抓取HTTPS包
- 动态创建asp.net控件之我见
- url 函数 php,php中url处理函数总结
- win7系统锁定计算机设置方法
- Mybatis的动态sql语句的查询
- 面试题9:斐波那契数列
- java报错: 类重复: newemission.calculate_java当中的继承(一)
- atmega128 单片机 玩具电子琴 蜂鸣器 电子琴
- Android ViewPager实现3D画廊效果
- 【M365运维】匹配用户UPN和Email地址
- 计算机个人市场调查实验报告,市场调查实验报告(一)
- Canonical标签有没有必要使用呢? Canonical标签作用是什么
- Ubuntu Linux系统Google日语输入法跨平台版Mozc安装笔记
- [Excel]vlookup的内在逻辑以及模糊检索
- 为什么达芬奇能“艺工结合”,要从“T型设计”说起
- 从零开始学飞塔第一篇:飞塔防火墙基本上网配置(PPPoE拨号固定IP上网)FortiGate Broadband internet access
- 忘了账号——如何查看本地mysql账号