SDL 如何打包像素?

How does SDL pack pixels?

假设我有一个 5 位像素的 SDL_Surface
包含第一个像素的字节可能包含第二个像素的一部分吗?
一行中包含最后一个像素的字节是否可以包含下一行中第一个像素的一部分?

包含第一个像素的字节不能包含第二个像素的一部分。这对于在表面上执行的读写操作来说会很糟糕。每个像素都是字节对齐的,可以是 8、16、24 或 32 位长。即使使用调色板,每个像素都有自己的字节。

但是有一个例外:如果表面已经 run-length encoded, then more than one pixel can be encoded in the same byte (or group of bytes). But that is completely different from one byte containing a pixel plus part of another. You can use SDL_SetSurfaceRLE 提示您想要对表面进行编码。

某处可能还有其他异常,但您肯定不担心。

但是,如果您谈论的是像素的颜色分量,那就另当别论了。这完全取决于您的表面格式。如果像素的每个分量都可以包含在 5 位中,但您使用的是 32 位格式,那么每个通道可能是 8 位。在这种情况下,每个颜色分量都保留在自己的字节中。但是如果你有 5 位通道的像素,例如 RGB555(16 位)格式,那么当然,组件必须共享字节:第一个字节包含红色分量和部分绿色分量,第二个字节字节包含其余的绿色分量以及蓝色分量。查看 SDL_PixelFormatEnum 了解更多信息。