在 SDL 中使精灵背景透明

Cod*_*got 5 c c++ sdl

如何在将精灵加载到 SDL_Surface 后通过更改 alpha 将精灵的背景颜色更改为透明。SDL 中是否有任何函数使用一种洪水填充算法并将给定颜色的所有像素更改为外部透明。如果使用相同的颜色,我不希望它发生在精灵的边界内。

示例图像:

精灵图像

在使用 SDL_BlitSurface 在窗口表面上 blit 之前,我想让这里的背景变成蓝色透明。

Bra*_*red 3

在这里,只有颜色键 ( SDL_SetColorKey()) 或完整的 Alpha 通道可以为您提供帮助。

请注意,如果您使用 PNG 等格式,则可以在源图形中提供 Alpha 通道。如果您只是有时需要/想要 Alpha,则在源图形中提供 Alpha 通道,并使用SDL_SetSurfaceBlendMode()SDL_BLENDMODE_NONE混合不使用 Alpha 并SDL_BLENDMODE_BLEND与其混合。

既支持SDL_SurfaceSDL_Texture支持SDL_BlendMode

即使SDL提供了另一种方法,例如您提到的填充。你不会想用它的。它更加困难、昂贵并且产生不必要的开销。您应该在这里坚持最佳实践。

您可能需要研究SDL_TextureSDL_Renderer切换到使用“纹理图集”而不是每个图像的单独表面/纹理,以最大限度地提高性能。