【问题标题】:SDL blitting with a mask使用掩码进行 SDL 位图
【发布时间】:2015-04-28 17:51:47
【问题描述】:

我有一个 SDL_image/surface(原始),我想对另一个 SDL_image/surface “blit”,它是一个掩码,用于从原始复制部分。

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

我目前正在对蒙版和原始图像进行像素遍历,这会导致输出出现很多问题。

是否存在使用 SDL 的 blitting 功能执行此操作的预先存在的技术?

【问题讨论】:

    标签: sdl


    【解决方案1】:

    听起来您的“蒙版”是一个 Alpha 通道。创建一个支持 alpha 的 SDL_image。

    【讨论】:

    • 我将如何实际执行 blit?
    • @ct:可能是带纹理的四边形。您是使用 SDL 设置 OpenGL 上下文,还是使用 SDL 自己的渲染函数?
    • 使用 SDL 设置 OpenGL 上下文
    【解决方案2】:

    添加 SDL2 答案以防有人正在寻找解决方案。没有额外的库。

    以下函数在 SDL2 API 中可用:

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

    用于设置表面的透明像素。在下面我的 hobby hack 的示例 sn-p 中,它在加载图像时使用。

    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

    【讨论】:

      猜你喜欢
      • 2012-02-20
      • 1970-01-01
      • 2022-01-21
      • 2021-12-10
      • 2017-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多