《关于SDL中的色彩键控》

其实我感觉初学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;
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值