SDL戴着面具发li

问题描述

| 我有一个SDL_image / surface(原始),我想“遮住”另一个SDL_image / surface,该SDL_image / surface是一个遮罩,用于从原始文件中复制部分内容。 遮罩使用255定义要保留的部分,使用0定义需要从图像中删除的区域。 我目前正在遍历遮罩和原始图像的像素,这在输出中引起很多问题。 是否有使用SDL的blitting功能来执行此操作的现有技术?     

解决方法

听起来您的“遮罩”是一个Alpha通道。创建具有Alpha支持的SDL_image。     ,如果有人正在寻找解决方案,请添加SDL2答案。没有其他库。 SDL2 API中提供以下功能:
int SDL_SetColorKey(SDL_Surface* surface,int          flag,Uint32       key)
用于在表面上设置透明像素。在下面的示例中,我的业余爱好代码片段是在加载图片时使用的。
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     

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...