VC++ C++ C# Algorithm

C++博客 首页 新随笔 联系 聚合 管理
  21 Posts :: 3 Stories :: 31 Comments :: 0 Trackbacks

SDL_Surface结构体有一个色彩键的成员。那什么是色彩键呢,色彩键就是当对二个表面进行Blit的时候,你不想让源表面的一种颜色显示在目标表面,该颜色就是色彩键,也就是让指定的颜色变成透明的。如果还是不明白,那我们就举个例子。
比如你想把以下的图片贴到一张北京图上的话,如下图
foo.jpg

background.jpg
你肯定不希望出现如下的情况
nokey.jpg
为了能够在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;   
    }
好了,快快看看效果吧。
key.jpg

posted on 2007-03-08 22:40 大熊猫 阅读(536) 评论(0)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理