簡體   English   中英

SDL_表面透明度問題

[英]SDL_Surface Transparency Issues

我一直在使用sdl ttf,現在,我正在創建用於多行文本呈現的文本呈現器功能。

我為每條線創建一個曲面,在“全局”曲面中塗抹,然后將該“全局”曲面轉換為紋理。

實際上,我的問題如下:如果使全局表面透明,則發散不起作用(顯示空表面),如果我設置了SDL_FillRect,然后執行SDL_SetColorKey,則不起作用。

我嘗試使用每個像素的方法來做到這一點,但是它不是預期的結果。

我真正需要的是:填充曲面(使用TTF_RenderText_Blended文本渲染的曲面),將它們着色在具有透明背景的SDL_Surface中,僅此而已。

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);

}

滲入具有透明背景的“ surfed_texture” =不顯示滲色的表面。 每像素方法:不刪除所有背景。

而且SDL_SetColorKey不起作用! (我已經嘗試過SDL_DisplayFormatAlpha,但仍然無法正常工作)。

一些幫助?

解決方案如下:

在“全局”表面中使用SDL_SetAlpha NOT,將SDL_SetAlpha應用於每個“臨時”表面,且不帶標志且值為0:

SDL_SetAlpha(temporal,NULL,0);

現在一切正常!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM