SDL2 - RGB888和RGB24之间的区别

11
据我了解,无论是 RGB888 还是 RGB24 格式,它们都先放置红色成分,然后是绿色和蓝色,且两种格式每个像素均采用 24 位(因为 8+8+8=24)。根据这些信息,这两个标识符似乎描述的是完全相同的格式,但是我可以证实,我的某些代码适用于其中一个格式,而不适用于另一个格式。那么导致它们不兼容的区别是什么?

我只是猜测。但通常系统使用32位来保存RGB24,其中8位完全被浪费。这是因为寻址通常更容易/更快速。 - Aron
2个回答

20

它们是不同的。如果您查看 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


-3
据我了解,RGB24格式将数据以位三元组的形式表示,而RGB888则简单地将每个通道的相应字节连接在一起。
RGB24:
RGBRGBRG BRGBRGBR GBRGBRGB

RGB888:

RRRRRRRR GGGGGGGG BBBBBBBB

我非常怀疑RGB24能带来功能或技术方面的好处,因为像RGB888一样将字节加载到内存中会更容易。但是我不确定。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接