分类: LINUX
2006-05-26 11:12:51
SDL系列教程(七):颜色码
作者:akinggw
SDL_Surface结构中有一个部分叫颜色码。
颜色码是干什么用的呢?它就是指你不想在屏幕上显示的那个颜色。本篇教程讲解如何使用颜色码。
假如我们想把下面这幅人物图片:
显示在下面这幅背景上。
|
如果我们直接将人物放在背景上,将会得到下面的结果: |
这看起来是不是很别扭,有没有办法将人物的蓝色背景驱除掉。
答案当然是有的。
讲到这里,我们不得不首先讲一下颜色,表示颜色的方法有很多,而我们这里使用的颜色是RGB格式。
RGB代表什么呢?
如果你学过美术就应该知道,任何色彩都是通过三种基本色彩按照不同比例配置而成的。而我们计算机的色彩也是通过三原色配置而成的,但计算机中使用的三原色和画图时所使用的不同。计算机所使用的是红(RED),绿(GREEN),蓝(BLUE)。
它们的每个值的范围都是一样的,用16进制表示,从0——FF。当三种颜色都为0时,表示白色,相反当三种颜色都为FF,表示黑色。
我们这里所使用的人物图片的背景颜色为(Red 0, Green 0, Blue FF)。应该是蓝色吧。
在这里我就不得不多说几句,在我们做游戏时,最好将颜色码设置成一种不常用的色彩,一般都设置成亮粉红色。
颜色码的设置还是在导入图象函数里:
/* 导入位图*/
SDL_Surface *load_image( char *filename )
{
//将图象暂时存储在这里
SDL_Surface* loadedImage = NULL;
//存储最佳的图象
SDL_Surface* optimizedImage = NULL;
//导入图象
loadedImage = IMG_Load( filename );
//如果导入图象不为空
if( loadedImage != NULL )
{
//建立最佳的图象
optimizedImage = SDL_DisplayFormat( loadedImage );
//释放老的图象
SDL_FreeSurface( loadedImage );
if( optimizedImage != NULL )
{
//取得颜色码
Uint32 colorkey = SDL_MapRGB( optimizedImage->format, 0, 0, 0xFF );
//设置颜色码
SDL_SetColorKey( optimizedImage, SDL_RLEACCEL | SDL_SRCCOLORKEY, colorkey );
}
}
//返回最佳的图象
return optimizedImage;
}
我们在函数中主要加入了下面两句:
//取得颜色码
Uint32 colorkey = SDL_MapRGB( optimizedImage->format, 0, 0xFF, 0xFF );
//设置颜色码
SDL_SetColorKey( optimizedImage, SDL_RLEACCEL | SDL_SRCCOLORKEY, colorkey );
前面一句是得到我们要设置的颜色码,并且颜色码要保持和屏幕相同的格式。后一句用于设置图片的颜色码。第一个参数说明我们使用颜色码的图片;第二个参数中SDL_RLEACCEL标志说明图片要加速显示,SDL_SRCCOLORKEY标志说明我们将这张图片放在另一张图片之上时,仍然使用颜色码;第三个参数是我们要设置的颜色码。
最后,我们重新将图象画到屏幕上。
/*在屏幕上画图*/
apply_surface(0,0,background,screen,NULL);
apply_surface(x,y,demo,screen,NULL);
截图如下: