免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1295 | 回复: 0
打印 上一主题 下一主题

SDL系列教程(七):颜色码 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-05-26 11:12 |只看该作者 |倒序浏览
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);

截图如下:






本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/19671/showart_118367.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP