cocos2dx——像素格式
像素格式是图像存储在GPU内存的方式。
你可能会见到以下像素格式:
- RGBA8888(32位)(kTexture2DPixelFormat_RGBA8888)
- RGBA4444(16位)(kTexture2DPixelFormat_RGBA4444)
- RGB5_A1(16位)(kTexture2DPixelFormat_RGB5A1)
- RGB565(16位)(kTexture2DPixelFormat_RGB565)
RGBA8888:
红色通道、绿色通道、蓝色通道和alpha 通道各8位。
如果想获得最好的图片质量,使用这种格式是很靠谱的。
但它会占用的内存会比16位的纹理多一倍,在IPhone上内存是很宝贵的资源,这个你懂的。
自然的,它的运算速度也是相对较慢的。
常用的地方:整个场景的背景图片、大量渐变色的图片。
RGBA4444:
红色通道、绿色通道、蓝色通道、alpha通道各4位
它对每个通道都有不错的支持,还能保证相对良好的速度和内存占用率。
常用的地方:需要有不同的透明度精灵。
RGB5A1:
红、绿、蓝三色通道各5位,Alpha通道仅有1位。
RGB通道表现良好,但是Alpha通道可就惨了。它在内存占用和速度上表现不错。
常用的地方:精灵需要透明度上的表现,但是透明度的表现上只有两种:开或者关。
RGB565:
红色通道5位,绿色通道6位,蓝色通道5位,这可怜的孩子没有Alpha通道。
它能尽最大努力的给你一个高品质的16位纹理,前提是你不需要透明度的支持。
常用的地方:游戏中的背景图像。
cocos2d中默认的像素格式是RGBA8888。
像素深度是什么?
像素深度是指储存每个像素所用的位数,像素深度决定色彩图像的每个像素有可能的颜色数或者确定灰度图像的每个像素可能有的灰度级数。
一个像素的颜色在计算机中有多少个字节数据来描述,计算机中用二进制来表示一个像素的数据,用来显示一个像素的数据位数越多,则这个像素的颜色纸更加丰富、更加细腻、颜色深度越深。
常见的像素深度有1位、8位、16位、24位、32位
1位:用一个二进制来表示颜色的,这叫单色显示。例小饭店门口的LED屏。
8位:用8个二进制表示颜色,2的8次方也就是256中颜色,256种颜色只能显示出黑白。例以前的老式黑白电视机。
16位:可以表示出65536种颜色。表示RGB565(用5位二进制表示R红色、用6位二进制表示G绿色、用5位二进制表示B黄色)。这种情况下,颜色显示色彩失真比较严重,人眼看到不真实。
24位:可以表示出16777216种颜色。表示RGB888(用8位二进制表示R红色、用8位二进制表示G绿色、用8位二进制表示B黄色)。这种情况下,还原色彩真实度,这种RGB888表示的方法叫做真彩色。
32位:32位是在24位基础上加上了A阿尔法-表示透明度。表示为ARGB。
理解像素深度对于图片的计算是有很大的帮助。分辨率比较简单,就不做介绍。
图片大小的计算公式:
大小(MB)=分辨率位深 /(8*1024*1024)(在分母中8*1024*1024–8表示位深/8=字节数,一个像素的深度;2个1024对应单位B和KB的转换到MB* )
分辨率=高*宽(如:2592*1944–5百万像素的工业相机)
位深:就是像素深度中的32位、24位、16位、8位(工业相机中大部分都是以8位为基础的黑白或24位的真彩色相机)
根据这个公式计算图片大小就会简单很多,例:
5M百万像素分辨率为2592*1944,拍出的图片是多大?
如果是黑白相机拍出来的图片,图片位深一般为8位
图片大小为2594*1944*8 /(8*1024*1024)=4.8MB
如果是彩色相机拍出来的图片,图片位深一般为24位
图片大小为2594*1944*24 /(8*1024*1024)=14.4MB