[概念]纹理的像素格式

发表于2018-05-10
评论1 5.6k浏览
本片文章和大家科普下纹理的像素格式的概念只是,其中纹理的像素格式是图像存储在GPU内存的方式。TexturePacker纹理格式截图

你可能会见到以下像素格式:
  • RGBA8888(32位)(kTexture2DPixelFormat_RGBA8888)
  • RGBA4444(16位)(kTexture2DPixelFormat_RGBA4444)
  • RGB5_A1(16位)(kTexture2DPixelFormat_RGB5A1)
  • RGB565(16位)(kTexture2DPixelFormat_RGB565)

RGBA8888:
红色通道,绿色通道,蓝色通道,alpha(透明度)通道各8位。如果想获取做好的图片资粮,使用这种格式最靠谱。
手机上占用内存太大,这个格式占用空间计算:以1024*1024计算图片占用空间 1024*1024*4 = 4M
常用地方:整个场景背景图片,大量渐变色的图片。

以RGBA8888格式(2048*2048)计算内存:
图片占用内存: 2048*2048*32/8/1000/1000 = 16M
1M = 1000KB; 1KB = 1000字节;1字节 = 8 位;32 = 8 + 8 + 8 + 8 位
2048和2048为长宽
OpenGL ES生成纹理在生成纹理时大小会自动扩展成2的幂次方。不足自动向下调整
例:85*121图片 生成纹理就是 128 * 128  占用内存64k

BGRA8888:
蓝色通道,绿色通道,红色通道,alpha(透明度)通道各8位。同上只不过像素格式顺序不一样,不是特别常用

RGBA4444:
红色通道,绿色通道,蓝色通道,alpha(透明度)通道各4位。对每个通道都有不错的支持,还能保证相对良好的速度和内存占用率。
常用地方:需要有不同的透明度精灵。

RGB888:
红色通道,绿色通道,蓝色通道,各8位。没用alpha通道。
常用地方:用在没有透明度的图片。游戏背景图像

RGB565:(*.jpg是565的一种格式)
红色通道5位,绿色通道6位,蓝色通道5位,这可怜的孩子没有Alpha通道。尽最大努力的给你一个高品质的16位纹理,前提是你不需要透明度的支持。
常用地方:游戏背景图

RGBA5551 (别名:RGB5A1):
红色通道5位,绿色通道5位,蓝色通道5位,Alpha通道1位。RGB通道表现良好,但是Alpha通道就惨了。内存占用和速度上表现不错。
常用地方:精灵需要透明度的表现,但是透明度的表现只有两种:开或关。

RGBA5555:
红色通道5位,绿色通道5位,蓝色通道5位,Alpha通道5位。各方面表现都比较良好

PVRTC2(iPhone的图形芯片(PowerVR MBX)对一种称为 PVRTC 的压缩技术提供硬件支持):
所有颜色和透明度占2个字节(品质可能有点低)

PVRTC4:(ios产品专用)
所有颜色和透明度占4个字节,在ios上基本都用这个格式

PVRTC2_NOALPHA:
RGB占用2个字节,没用ALPHA通道

PVRTC4_NOALPHA:
RGB占用4个字节,没用ALPHA通道

ETC1:
是android通用纹理的压缩格式,几乎所有的android机器都支持,是opengles2.0的标准。不像pvrtc4只是部分powervr的显卡支持。
ETC1图片不支持半透明(有替代方案可以使etc1图片兼容半透明显示),内存占用只有正常RGBA8888的八分之一(一个像素0。5个字节),并具有极高的加载速度。
ETC1的图片大小只跟图片的尺寸有关系,在大小上无法媲美jpg或png8的图片。
RGBA各占用0.5个字节

S3TC:(dds的一种格式):
是wp8手机支持的通用纹理压缩格式。RGBA各占用0.5个字节
RBGA8888其他RGB格式,不能被显卡所认可,需要开辟临时内存来读取,假如是2048*2048占用内存16M,读取的时候会临时增到32M。渲染完成,又变为16M
pvr, etc1,s3tc,可以被显卡所认可,而不需要开辟临时内存来读取,所以即便同为argb8888格式,pvr也会比png有效率。虽然不会节约程序稳定的运行内存,但是会避免加载大量图片时内存暴涨。

格式压图原理:

RBGA8888   R 8位  2^8 = 256  可以表现出来256种不同的红色
RBGA5555  R 8位  2^5 = 32  可以表现出来32种不同的红色
如果RBGA8888转换为RBGA5555,比如红色,会去掉一些红色的显示,用同一种红色代替,从而减少内存。
来自:https://blog.csdn.net/shimazhuge/article/details/77969628

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引