SDL_曲面透明度问题
SDL_Surface Transparency Issues
我一直在使用sdl-ttf,现在,我正在创建一个用于多行文本渲染的文本渲染器函数。
我为每条线创建一个曲面,在"全局"曲面中进行闪电扫描,然后将该"全局"表面转换为纹理。
事实上,我的问题如下:如果我让全局曲面透明,blitting就不起作用(它显示的是一个空曲面),如果我设置SDL_FillRect,然后执行SDL_SetColorKey,就不会起作用。
我试着用每像素的方法做到这一点,它很有效,但不是预期的结果。
实际上,我需要的是:Blit曲面(使用TTF_RenderText_Blended的文本渲染曲面),在具有透明背景的SDL_Surface中Blit它们,仅此而已。
SDL_Surface * surfed_texture = SDL_CreateRGBSurface(SDL_SWSURFACE,surface_width,surface_height,32,
0x000000ff, 0x0000ff00, 0x00ff0000, 0xff000000);
Uint32 tormv = SDL_MapRGB(surfed_texture->format,255,0,255);
int possiblecolors[] = { 255,0,255,255,255,255 };
int in_pc = 0;
if(color.r == possiblecolors[0] && color.g == possiblecolors[1] && color.b == possiblecolors[2]){
in_pc=3;
}
/*SDL_FillRect(surfed_texture,NULL,SDL_MapRGB(surfed_texture->format,possiblecolors[in_pc],possiblecolors[in_pc+1],possiblecolors[in_pc+2]));
SDL_SetColorKey(surfed_texture, SDL_SRCCOLORKEY, SDL_MapRGB(surfed_texture->format,possiblecolors[in_pc],possiblecolors[in_pc+1],possiblecolors[in_pc+2]));
*/
SDL_Surface * temporal = NULL;
for(int i=0;i<(int)buff_split.size();i++){
const char* c_text = buff_split.at(i).c_str();
temporal = TTF_RenderText_Blended(font,c_text,color);
int w_fo;
int h_fo;
TTF_SizeText(font,c_text,&w_fo,&h_fo);
SDL_Rect rct;
rct.y=i*lineSkip;
if(txt_align==ALIGN_LEFT){
rct.x=0;
}else if(txt_align==ALIGN_CENTER){
rct.x = surface_width/2 - w_fo/2;
}else if(txt_align==ALIGN_RIGHT){
rct.x = surface_width - w_fo;
}
rct.w=0;
rct.h=0;
// Blit surface
SDL_BlitSurface(temporal,NULL,surfed_texture,&rct);
SDL_FreeSurface(temporal);
}
Blitting into"surved_tructure"with transparent background=不显示Blitting的表面。逐像素方法:不删除所有背景。
SDL_SetColorKey不工作!(我已经尝试了SDL_DisplayFormatAlpha,但仍然无法工作)。
有什么帮助吗?
解决方案如下:
在"全局"曲面中使用SDL_SetAlpha NOT,将SDL_SetAlpha应用于每个没有标志且值为0:的"临时"曲面
SDL_SetAlpha(temporal,NULL,0);
现在它工作得很好!
相关文章:
- 警告处理为错误这里有什么问题
- 最小硬币更换问题(自上而下方法)
- 为"adjacent"变量赋值时出现问题
- 我的神经网络不起作用 [XOR 问题]
- 在Ubuntu 16.04上安装Cilk时出现问题
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 编译包含字符串的代码时遇到问题
- Project Euler问题4的错误解决方案
- 问题:什么是QAbstractItemView::NoEditTriggers的反面
- 在编译C++代码(具有dlib和opencv)到WASM时面临问题
- 在进程中对同一管道进行读取和写入时C++管道出现问题
- 静态数据成员的问题-修复链接错误会导致编译器错误
- C++ 雷神库 - 使用资源加载器类时出现问题(不命名类型)
- 一个关于在C++中重载布尔运算符的问题
- 首要问题的答案让值班员搞错了
- setlocale的C++土耳其字符串问题
- 如何重构类层次结构以避免菱形问题
- Qt OpenGL - 纹理透明度问题
- C++ OpenGL 位图透明度问题
- SDL_曲面透明度问题