SDL2 - RGB888和RGB24之间的差异

时间:2015-11-27 17:30:02

标签: sdl-2

据我所知,RGB888RGB24格式都将其红色组件放在第一位,然后是绿色,然后是蓝色,两种格式每个像素总共需要24位(因为8+) 8 + 8 = 24)。鉴于此信息,两个标识符似乎都描述了完全相同的格式,但我可以验证我的一些代码是使用两种格式之一而不是另一种格式。两者之间的区别是什么使它们不相容?

2 个答案:

答案 0 :(得分:1)

它们是不同的。如果您查看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保留为其他格式。

答案 1 :(得分:-1)

根据我的理解,RGB24将数据格式化为位三元组,而RGB888简单地连接每个通道的相应字节。

RGB24:

RGBRGBRG BRGBRGBR GBRGBRGB

RGB888:

RRRRRRRR GGGGGGGG BBBBBBBB

我非常怀疑RGB24是否具有功能或技术优势,因为像使用RGB888一样将字节加载到内存中会更容易。但我不确定。