SDL_Surface結構體有一個色彩鍵的成員。那什么是色彩鍵呢,色彩鍵就是當對二個表面進行Blit的時候,你不想讓源表面的一種顏色顯示在目標表面,該顏色就是色彩鍵,也就是讓指定的顏色變成透明的。如果還是不明白,那我們就舉個例子。
比如你想把以下的圖片貼到一張北京圖上的話,如下圖


你肯定不希望出現如下的情況

為了能夠在Blit的時候不顯示綠色的背景顏色(Red 0,Green FF, Blue FF,不知道什么顏色),你要設定一下色彩鍵,色彩鍵一般是在圖像裝載的時候設定的。
下面我們就裝載一張圖片
SDL_Surface?
*
load_image(?std::
string
?filename?)?

{
????
//
The?image?that's?loaded
????SDL_Surface
*
?loadedImage?
=
?NULL;
????
????
//
The?optimized?image?that?will?be?used
????SDL_Surface
*
?optimizedImage?
=
?NULL;
????
????
//
Load?the?image
????loadedImage?
=
?IMG_Load(?filename.c_str()?);
????
????
//
If?the?image?loaded
????
if
(?loadedImage?
!=
?NULL?)

????
{
????????
//
Create?an?optimized?image
????????optimizedImage?
=
?SDL_DisplayFormat(?loadedImage?);
????????
????????
//
Free?the?old?image
????????SDL_FreeSurface(?loadedImage?);

????????
if
(?optimizedImage?
!=
?NULL?)

????????
{
????????????
//
我們用SDL_MapRGB來得到該顏色的色彩鍵。
????????????Uint32?colorkey?
=
?SDL_MapRGB(?optimizedImage
->
format,?
0
,?
0xFF
,?
0xFF
?);

????????
????????????SDL_SetColorKey(?optimizedImage,?SDL_RLEACCEL?
|
?SDL_SRCCOLORKEY,?colorkey?);
????????}
???????
return
?optimizedImage;
}
SDL_SetColorKey的第一個參數就是我們要設色彩鍵的表面,SDL_RLEACCEL標志表示允許在BLit的使用RLE(我也不知道是什么,是編碼技術?)加速,這樣程序在運行的時候就不會
慢下來,SDL_SRCCOLORKEY 標志當然是說明我們要用色彩鍵了。
??? apply_surface( 0, 0, background, screen );
??? apply_surface( 240, 190, foo, screen );
???
??? //Update the screen
??? if( SDL_Flip( screen ) == -1 )
??? {
??????? return 1;???
??? }
好了,快快看看效果吧。