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;
}
好了,快快看看效果吧。