Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1419801
  • 博文数量: 430
  • 博客积分: 9995
  • 博客等级: 中将
  • 技术积分: 4388
  • 用 户 组: 普通用户
  • 注册时间: 2006-05-24 18:04
文章存档

2013年(1)

2008年(2)

2007年(14)

2006年(413)

分类: 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);

 

截图如下:

 

 

 
阅读(3056) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~