我有一个SDL_image / surface(原版),我想对另一个SDL_image /表面“blit”,这是一个掩盖从原版中复制出来的部分。
掩码使用255来定义要保留的部分,使用0来定义需要从图像中删除的区域。
我目前正在对掩码和原始图像进行像素遍历,这会在输出中造成很多问题。
使用SDL的blitting功能是否有预先存在的技术?
答案 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;
}
参考: