Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用SDL_像素格式_UNKNOWN好吗?_C++_C_Sdl - Fatal编程技术网

C++ 使用SDL_像素格式_UNKNOWN好吗?

C++ 使用SDL_像素格式_UNKNOWN好吗?,c++,c,sdl,C++,C,Sdl,我正在阅读SDL_CreateTexture函数,我对“Uint32格式”参数选择的参数感到非常困惑。有很多枚举值,我不知道选择哪一个以及为什么。我不知道为什么SDL_PIXELFORMAT_UNKNOWN看起来是个好主意。是吗?好的,所以你的问题没有提供足够的上下文来真正告诉你该怎么做 你想要实现什么 你已经试过什么了 它会抛出错误吗 我将尝试给您一些一般性提示: 纹理只是一个大数组,所有像素一行一行地保存,从左到右、从上到下读取(至少通常如此)。 此数组的长度为: 长度(以字节为单位)=

我正在阅读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
    例如,交换了BR通道,而没有alpha通道

虽然这可能是一个很好的示意图描述,但
长度(以字节为单位=w*h*nBytesOfPixel
是错误的;它是
pitch*h
。对于RGBA8888来说并不重要,但对于每像素3字节的格式来说可能会有很大的不同。@keltar:OP要求的函数是否有责任翻译这一点?因为常数依赖于硬件?是否存在
w*nBytesOfPixel==pitch
不起作用的情况?一些每行填充还是什么?是的,SDL对行使用4字节对齐。若bpp是4,那个就没关系了,因为每个像素都符合对齐规则。如果bpp为3(例如,没有alpha通道,也没有打包到uint32)——那么,您可以很容易地在每行末尾填充1到3个字节。