据我所知,RGB888
和RGB24
格式都将其红色分量放在第一位,然后是绿色,然后是蓝色,并且这两种格式每个像素总共占用24位(因为8+8+8=24)。给定这些信息,两个标识符似乎都描述了完全相同的格式,但我可以验证我的一些代码可以使用两种格式中的一种,但不能使用另一种。两者之间的区别是什么,使它们不兼容?
它们是不同的。如果你查看SDL2/SDL_pixels.h
,你会发现:
SDL_PIXELFORMAT_RGB24 =
SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_ARRAYU8, SDL_ARRAYORDER_RGB, 0,
24, 3)
SDL_PIXELFORMAT_RGB888 =
SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_XRGB,
SDL_PACKEDLAYOUT_8888, 24, 4)
SDL_PIXELFORMAT_RGBX8888 =
SDL_DEFINE_PIXELFORMAT(SDL_PIXELTYPE_PACKED32, SDL_PACKEDORDER_RGBX,
SDL_PACKEDLAYOUT_8888, 24, 4)
因此,RGB24是一个紧密压缩的三字节格式(RRGGBB
),而RGB888
是一个四字节格式,第一个字节被忽略(XXRRGGBB
)。因此,该格式的名称令人困惑,XRGB8888
将是一个更合适的名称。
不知道他们为什么称它为RGB888
而不是XRGB8888
,但他们在其他格式上也保留了领先的X
。
根据我的理解,RGB24将数据格式化为位三元组,而RGB888只是将每个通道的相应字节连接起来。
RGB24:
RGBRGBRG BRGBRGBR GBRGBRGB
RGB888:
RRRRRRRR GGGGGGGG BBBBBBBB
我非常怀疑RGB24是否具有功能或技术优势,因为像RGB888那样将字节加载到内存中会更容易。但我不确定。