C++ 使用SDL_像素格式_UNKNOWN好吗?
我正在阅读SDL_CreateTexture函数,我对“Uint32格式”参数选择的参数感到非常困惑。有很多枚举值,我不知道选择哪一个以及为什么。我不知道为什么SDL_PIXELFORMAT_UNKNOWN看起来是个好主意。是吗?好的,所以你的问题没有提供足够的上下文来真正告诉你该怎么做C++ 使用SDL_像素格式_UNKNOWN好吗?,c++,c,sdl,C++,C,Sdl,我正在阅读SDL_CreateTexture函数,我对“Uint32格式”参数选择的参数感到非常困惑。有很多枚举值,我不知道选择哪一个以及为什么。我不知道为什么SDL_PIXELFORMAT_UNKNOWN看起来是个好主意。是吗?好的,所以你的问题没有提供足够的上下文来真正告诉你该怎么做 你想要实现什么 你已经试过什么了 它会抛出错误吗 我将尝试给您一些一般性提示: 纹理只是一个大数组,所有像素一行一行地保存,从左到右、从上到下读取(至少通常如此)。 此数组的长度为: 长度(以字节为单位)=
- 你想要实现什么
- 你已经试过什么了
- 它会抛出错误吗
长度(以字节为单位)=w*h*nBytesOfPixel代码>
因此,为了正确地为纹理分配内存,并正确地将字节解释为像素颜色,需要像素中的字节数(在本例中为位)。
要将此告知SDL_CreateTexture
,必须提供其中一个像素格式值。如果有疑问,请使用SDL\u PIXELFORMAT\u RGBA8888
,它可以覆盖您的所有基础,并且可以从其他任何地方轻松翻译。如名称所示,它将每个像素保存为4个字节,每种颜色1个字节,顺序为:Red、Green、Blue、Alpha。Alpha用于透明度
如果您将其与其他一些候选对象进行比较,您可能会看到它们的属性
SDL\u PIXELFORMAT\u BGR888
例如,交换了B和R通道,而没有alpha通道
虽然这可能是一个很好的示意图描述,但长度(以字节为单位=w*h*nBytesOfPixel
是错误的;它是pitch*h
。对于RGBA8888来说并不重要,但对于每像素3字节的格式来说可能会有很大的不同。@keltar:OP要求的函数是否有责任翻译这一点?因为常数依赖于硬件?是否存在w*nBytesOfPixel==pitch
不起作用的情况?一些每行填充还是什么?是的,SDL对行使用4字节对齐。若bpp是4,那个就没关系了,因为每个像素都符合对齐规则。如果bpp为3(例如,没有alpha通道,也没有打包到uint32)——那么,您可以很容易地在每行末尾填充1到3个字节。