SDL资料(七):颜色码

 

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

 

截图如下:

 

 

关于更多内容请访问金桥科普网站( http://popul.jqcq.com  )游戏开发栏目,如果你需要游戏开发方面的书籍请参考金桥书城游戏频道(http://book.jqcq.com/category/1_70_740.html )。 如果你在阅读本篇文章时有什么好的建议请来信给我,我的E_mail: akinggw@126.com. 如果你在使用SDL时有什么问题,请到金桥科普网站(http://popul.jqcq.com  )游戏开发栏目,我将详细地为你解答。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值