一.1张图片内存如何计算
一张图片占用的内存由以下两个因素决定:
- 图片的像素点个数
- 单位像素占用的字节数
其中图片的像素点个数是图片的宽度与长度的积,所以一张图片占用的内存值为:
图片长度 * 图片宽度 * 单位像素占用的字节数
单位像素所占用的字节数与图片的解码方式有关。
默认情况下,在cocos里加载一张图片,每一个像素点使用4个byte来表示1个byte(8位)代表red,另外3个byte分别代表green、blue和alpha透明通道。这个就简称RGBA8888
.
举例来说,一张1136x640的背景图占用的内存为 1136x640x32/8 = 2840 KB
当然我们也可以改变图片的解码格式:
cc.Texture2D.setDefaultAlphaPixelFormat(cc.Texture2D.PIXEL_FORMAT_RGBA4444)
此时,图片的解码都会使用RGBA4444
举例来说,一张1136x640的背景图占用的内存为 1136x640x16/8 = 1420 KB
这里有个问题:首先,纹理像素格式的改变会影响后面加载的所有纹理。因此,如果你想后面加载纹理使用不同的像素格式的话,必须再调用此方法,并且重新设置一遍像素格式。
其次,如果你的CCTexture2D设置的像素格式与图片本身的像素格式不匹配的话,就会导致显示严重失真。比如颜色不对,或者透明度不对等等。