gpt4 book ai didi

c++ - SDL_Surface 透明度问题

转载 作者:行者123 更新时间:2023-11-28 07:46:43 26 4
gpt4 key购买 nike

我一直在使用 sdl ttf,现在,我正在创建一个用于多行文本渲染的文本渲染器函数。

我正在为每条线创建一个表面,在“全局”表面中进行 blitting,然后将该“全局”表面转换为纹理。

实际上我的问题如下:如果我让全局表面透明,blitting 不起作用(它显示空表面),如果我设置 SDL_FillRect,然后执行 SDL_SetColorKey,则不起作用。

我试着用逐像素方法来做到这一点,它有效,但不是预期的结果。

我实际上需要的是:Blit surfaces(使用 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 到具有透明背景的“surfed_texture” = 不显示 blitted 表面。Per-Pixel 方法:不删除所有背景。

而且 SDL_SetColorKey 不工作! (我已经尝试过 SDL_DisplayFormatAlpha,但仍然无法正常工作)。

有帮助吗?

最佳答案

解决方法如下:

在“全局”表面中使用 SDL_SetAlpha NOT,将 SDL_SetAlpha 应用于每个没有标志且值为 0 的“时间”表面:

SDL_SetAlpha(temporal,NULL,0);

现在一切正常!

关于c++ - SDL_Surface 透明度问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14781464/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com