《关于SDL中的色彩键控》

来源:互联网 发布:男装批发软件 编辑:程序博客网 时间:2024/05/23 13:10

其实我感觉初学SDL的时候,前边的一些代码格式都基本相同,无非就是定义屏幕的各种属性,位图指针,加载图片,优化图片,位图传输,初始化所有SDL子系统然后用加载函数来加载图片等等。反正大概都是这个样子。

而色彩键控,需要我们绘制出来我们要设置为色键的色彩,通常是调用SDL_MapRGB()函数输入三基色的值,还需要用到的函数就是SDL_SetColorKey()函数,需要用它进行键控的画面,放置的标志位,设置色键的颜色等等。下面我们来看具体的代码

 #include "SDL/SDL.h"
#include "SDL/SDL_image.h"
#include <string>


const int SCREEN_HEIGTH=360;//设置屏幕的各种属性
const int SCREEN_WIDTH=336;
const int SCREEN_BPP=32;


SDL_Surface *background=NULL;//定义一些图片指针
SDL_Surface *image=NULL;
SDL_Surface *screen=NULL;


SDL_Event event;
void apply_surface(int x,int y,SDL_Surface *source,SDL_Surface *destination)//位图传输函数
{
SDL_Rect offset;

offset.x=x;
offset.y=y;
SDL_BlitSurface(source,NULL,destination,&offset);
}


SDL_Surface *load_image(std::string filename)//图片加载函数
{
SDL_Surface *loadedImage=NULL;
SDL_Surface *optimizedImage=NULL;
loadedImage=IMG_Load(filename.c_str());
if(loadedImage!=NULL)
{
optimizedImage=SDL_DisplayFormat(loadedImage);
SDL_FreeSurface(loadedImage);
if(optimizedImage!=NULL)
{
Uint32 colorkey=SDL_MapRGB(optimizedImage->format,0,0xFF,0xFF);//输入三基色的值,制定与画面相同的格式
SDL_SetColorKey(optimizedImage,SDL_SRCCOLORKEY,colorkey);
}
}
return optimizedImage;



int main(int argc,char *args[])
{
bool quit=false;
if(SDL_Init(SDL_INIT_EVERYTHING)==-1)//初始化SDL的所有子系统
return 1;
screen=SDL_SetVideoMode(SCREEN_WIDTH,SCREEN_HEIGTH,SCREEN_BPP,SDL_SWSURFACE);
if(screen==NULL)
return 1;
SDL_WM_SetCaption("dfh",NULL);
image=IMG_Load("./1.png");
background=IMG_Load("./a.jpg");
apply_surface(0,0,background,screen);
apply_surface(10,10,image,screen);
if(SDL_Flip(screen)==-1)
return 1;
//SDL_Delay(5000);
while(quit==false)
{
while(SDL_PollEvent(&event))
{
if(event.type==SDL_QUIT)
quit=true;
}
}
//SDL_FreeSurface(message);
SDL_FreeSurface(background);
SDL_Quit();
return 0;
}

0 0
原创粉丝点击