【发布时间】:2015-04-28 17:51:47
【问题描述】:
我有一个 SDL_image/surface(原始),我想对另一个 SDL_image/surface “blit”,它是一个掩码,用于从原始复制部分。
掩码使用 255 定义要保留的部分,使用 0 定义需要从图像中移除的区域。
我目前正在对蒙版和原始图像进行像素遍历,这会导致输出出现很多问题。
是否存在使用 SDL 的 blitting 功能执行此操作的预先存在的技术?
【问题讨论】:
标签: sdl
我有一个 SDL_image/surface(原始),我想对另一个 SDL_image/surface “blit”,它是一个掩码,用于从原始复制部分。
掩码使用 255 定义要保留的部分,使用 0 定义需要从图像中移除的区域。
我目前正在对蒙版和原始图像进行像素遍历,这会导致输出出现很多问题。
是否存在使用 SDL 的 blitting 功能执行此操作的预先存在的技术?
【问题讨论】:
标签: sdl
听起来您的“蒙版”是一个 Alpha 通道。创建一个支持 alpha 的 SDL_image。
【讨论】:
添加 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;
}
参考:
【讨论】: