问题描述
|
我有一个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