您需要使用 SDL_TEXTUREACCESS_STREAMING 标志创建纹理并锁定纹理,然后才能操作像素数据。要判断某个像素在纹理中是否透明,请确保调用
SDL_SetTextureBlendMode(t, SDL_BLENDMODE_BLEND);
这允许纹理识别 Alpha 通道。
尝试这样的事情:
SDL_Texture *t;
int main()
{
// initialize SDL, window, renderer, texture
int pitch, w, h;
void *pixels;
SDL_SetTextureBlendMode(t, SDL_BLENDMODE_BLEND);
SDL_QueryTexture(t, NULL, &aw, &h);
SDL_LockTexture(t, NULL, &pixels, &pitch);
Uint32 *upixels = (Uint32*) pixels;
// you will need to know the color of the pixel even if it's transparent
Uint32 transparent = SDL_MapRGBA(SDL_GetWindowSurface(window)->format, r, g, b, 0x00);
// manipulate pixels
for (int i = 0; i < w * h; i++)
{
if (upixels[i] == transparent)
// do stuff
}
// replace the old pixels with the new ones
memcpy(pixels, upixels, (pitch / 4) * h);
SDL_UnlockTexture(t);
return 0;
}
如果您有任何问题,请随时提问。虽然我不是这个话题的专家。
如需进一步阅读和教程,请查看http://lazyfoo.net/tutorials/SDL/index.php。教程 40 专门处理像素操作。
如果方法名称有任何错误,我深表歉意(我在脑海中写下了这个)。
希望这有帮助。