戴着面具的SDL blitting

时间:2011-05-23 20:59:38

标签: sdl

我有一个SDL_image / surface(原版),我想对另一个SDL_image /表面“blit”,这是一个掩盖从原版中复制出来的部分。

掩码使用255来定义要保留的部分,使用0来定义需要从图像中删除的区域。

我目前正在对掩码和原始图像进行像素遍历,这会在输出中造成很多问题。

使用SDL的blitting功能是否有预先存在的技术?

2 个答案:

答案 0 :(得分:1)

听起来你的“面具”是一个alpha通道。创建一个支持alpha的SDL_image。

答案 1 :(得分:0)

如果有人正在寻找解决方案,请添加SDL2答案。没有额外的库。

SDL2 API中提供以下功能:

int SDL_SetColorKey(SDL_Surface* surface,
                    int          flag,
                    Uint32       key)

用于在表面中设置透明像素。在我的业余爱好hack的下面的示例片段中,它在加载图像时使用。

void* MGWindow::loadBMPImage(std::string fileName, bool transparent) 
{
    SDL_Surface* loadedImage = NULL;
    SDL_Texture* optimizedImage = NULL;
    loadedImage = SDL_LoadBMP(fileName.c_str());
    if(loadedImage != NULL)
    {
        if(transparent)
        {
            // TODO: Make it possible to have other color codes than
            // zero represent transparency
            SDL_SetColorKey(loadedImage, SDL_TRUE, 0);
        }
        optimizedImage = SDL_CreateTextureFromSurface(m_Renderer, loadedImage);
        SDL_FreeSurface(loadedImage);
    }
    return (void*)optimizedImage;
}

参考:

https://wiki.libsdl.org/SDL_SetColorKey