SDL如何包装像素?

时间:2018-07-20 09:14:38

标签: bitmap sdl pixel pixelformat

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

1 个答案:

答案 0 :(得分:1)

包含第一个像素的字节不能包含第二个像素的一部分。这对于在表面上执行的读取和写入操作将是可怕的。每个像素都是字节对齐的,可以是8位,16位,24位或32位长。即使使用调色板,每个像素也有其自己的字节。

但是有一个例外:如果表面是run-length encoded,则可以在同一字节(或一组字节)中编码多个像素。但这与一个包含一个像素加上另一个像素的一部分的字节完全不同。您可以使用SDL_SetSurfaceRLE来提示您要对表面进行编码。

在某处可能还有另一个例外,但是您肯定不担心。

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