c-如何使用memset为像素阵列添加颜色



我在C和SDL2中有一个带有像素阵列的程序:

Uint32 *pixels = NULL;
pixels = (Uint32 *) malloc (sizeof(Uint32)*(Uint32)windowWidth*(Uint32)windowHeight);
memset(pixels, 255, (Uint32)windowWidth*(Uint32)windowHeight*sizeof(Uint32));

使用memset,使我的第二个参数"255"将所有像素设置为白色。下面每隔一个数字,将像素设置为灰色阴影。如何将这些像素设置为实际颜色?

我使用这个像素阵列通过纹理和其他东西来设置屏幕颜色。纹理的像素格式为ARGB8888,因此四色通道的十六进制值应该有效,不是吗?

SDL_UpdateTexture(texture, NULL, pixels, (int)((Uint32)windowWidth * sizeof(Uint32)));

我尝试过使用十六进制,例如0xFFCC00FF,但这只是将其设置为白色。

memset的问题在于它将相同的值复制到每个字节。您希望在具有4字节值的循环中使用memcpy

Uint32 numPixels = (Uint32)windowWidth * (Uint32)windowHeight;
Uint32 color = (Uint32)0xFFCC00FF;
for (Uint32 i = 0; i < numPixels; ++i)
{
memcpy(pixels + i * sizeof(Uint32), &color, sizeof(color));
}

使用for循环:

Uint32 *pixels = NULL;
size_t nPixels = windowWidth * windowHeight;
pixels = malloc (sizeof (Uint32) * nPixels);
for (size_t c = 0; c < nPixels; c++) {
pixels[c] = color;
}

这不使用memset,但多亏了@Banex,我才想出了一些有效的方法。

Uint32 colour = (Uint32)0xFFCC00FF;
int i,j;
for(i=0;i<windowWidth;i++)
{
for(j=0;j<windowHeight;j++)
{
pixels[i+j*windowWidth]=colour;
}
}

最新更新