SDL2——RGB888和RGB24的区别
SDL2 - difference between RGB888 and RGB24
据我所知,RGB888
和 RGB24
格式都将红色分量放在第一位,然后是绿色,然后是蓝色,这两种格式每个像素总共占用 24 位(因为8+8+8 = 24)。鉴于此信息,两个标识符似乎描述了完全相同的格式,但我可以验证我的某些代码适用于这两种格式中的一种,但不适用于另一种。两者有什么区别使它们不兼容?
根据我的理解,RGB24 格式是位三元组的数据,而 RGB888 只是连接每个通道的相应字节。
RGB24:
RGBRGBRG BRGBRGBR GBRGBRGB
RGB888:
RRRRRRRR GGGGGGGG BBBBBBBB
我非常怀疑 RGB24 是否具有功能或技术优势,因为像使用 RGB888 一样将字节加载到内存中会更容易。但我不确定。
它们是不同的。如果您查看 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
去掉。
据我所知,RGB888
和 RGB24
格式都将红色分量放在第一位,然后是绿色,然后是蓝色,这两种格式每个像素总共占用 24 位(因为8+8+8 = 24)。鉴于此信息,两个标识符似乎描述了完全相同的格式,但我可以验证我的某些代码适用于这两种格式中的一种,但不适用于另一种。两者有什么区别使它们不兼容?
根据我的理解,RGB24 格式是位三元组的数据,而 RGB888 只是连接每个通道的相应字节。
RGB24:
RGBRGBRG BRGBRGBR GBRGBRGB
RGB888:
RRRRRRRR GGGGGGGG BBBBBBBB
我非常怀疑 RGB24 是否具有功能或技术优势,因为像使用 RGB888 一样将字节加载到内存中会更容易。但我不确定。
它们是不同的。如果您查看 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
去掉。