C++ 无背景的透明SDL_曲面

C++ 无背景的透明SDL_曲面,c++,opengl,sdl,alpha,sdl-ttf,C++,Opengl,Sdl,Alpha,Sdl Ttf,我正在使用SDL和OpenGL。 我使用SDLTTF创建一个带有文本的曲面,然后用该曲面创建一个纹理 我尝试将alpha通道(不透明度)应用于文本,我使用以下方式: SDL_Surface * fontsurf = TTF_RenderUTF8_Blended(font,buff_split.at(i).c_str(),color); SDL_PixelFormat *format = fontsurf->format; SDL_Surface* newSurface = SDL_

我正在使用SDL和OpenGL。 我使用SDLTTF创建一个带有文本的曲面,然后用该曲面创建一个纹理

我尝试将alpha通道(不透明度)应用于文本,我使用以下方式:

    SDL_Surface * fontsurf = TTF_RenderUTF8_Blended(font,buff_split.at(i).c_str(),color);
SDL_PixelFormat *format = fontsurf->format;
SDL_Surface* newSurface = SDL_CreateRGBSurface( SDL_SRCALPHA,
   fontsurf->w, fontsurf->h, 32,
   0x000000ff, 0x0000ff00, 0x00ff0000, 0xff000000 );


    Uint32 alpha = 0;
    alpha = SDL_MapRGBA( newSurface->format, 0,0,0, color.unused);

    SDL_Rect rect;
    rect.x = 0;
    rect.y = 0;
    rect.h = fontsurf->h;
    rect.w = fontsurf->w;
    int ret = SDL_FillRect( newSurface, &rect, alpha);

    SDL_SetAlpha(newSurface,SDL_SRCALPHA,SDL_ALPHA_TRANSPARENT);

    ret = SDL_BlitSurface( fontsurf, 0, newSurface, 0 );
不透明度应用正确,但SDL_贴图RGBA会在“newSurface”中创建黑色背景。
如何对文本应用alpha/不透明度,而不添加背景,仅对文本应用alpha/不透明度?

我认为您缺少用于newSurface的SDL\u SetColorKey

大概是这样的:

SDL_SetColorKey( newSurface , SDL_SRCCOLORKEY, SDL_MapRGB( newSurface->format, 0, 0, 0) );
或者更简单的方法是跳过用黑色矩形填充newSurface

删除此项:

SDL_FillRect( newSurface, &rect, alpha);
下面是我如何使用透明颜色制作图片的示例:

testImage = IMG_Load( "trans.png" );
// This picture contains color 255,0,255 which will be set as transparent

SDL_SetColorKey( testImage , SDL_SRCCOLORKEY, SDL_MapRGB( screen->format, 255, 0, 255) );
// I set the color 255,0,255 as transparent for that surface

SDL_BlitSurface( testImage , NULL , screen , NULL );
// and I draw it on the main surface (screen)

伙计,我需要这里的帮助,设置颜色键不起作用,如果我跳过fill rect,blit对我不起作用…你最好问一个新的>特定<问题,不要在那种状态下发布代码。好的,谢谢,我将打开一个新问题,使用sdl ttf不舒服。。。。