一个最简单的sdl显示图片例子sdl example sdl 例子 例程SDL贴图bmp

#include "SDL.h"
#include "SDL_image.h"


#define true 1
#define false 0


SDL_Surface *screen;
SDL_Surface *pic;
//SDL_Event event;
char exit_game=false;



void InitAll()
{
//if (SDL_Init(SDL_INIT_EVERYTHING) == -1)
if (SDL_Init(SDL_INIT_VIDEO|SDL_INIT_NOPARACHUTE) == -1)
//if (SDL_Init(SDL_INIT_VIDEO)== -1)
    {


printf("Initial Failed!\n");
SDL_Delay(3000);
exit(0);
    }
    //printf("SDL initialized.\n");
}
³õÊŒ»¯ÓÎÏ·
int InitGame()
{
//SDL_Surface *screen;
//SDL_Surface *pic
screen = SDL_SetVideoMode(800,480,16,SDL_SWSURFACE);
//void Draw_Circle(screen,250, 120, 85,0x0000ff0);
//screen = SDL_SetVideoMode(500,400,32,SDL_SWSURFACE|SDL_DOUBLEBUF);
if(screen == NULL)
{
printf("init screen failed, please check your display card");
return false;//init screen failed
}
return 1;
}


int initImg_BMP(const char *aFileName, SDL_Surface **aImg)
{
         SDL_Surface *pTemp;
//load picture filethe file must be BMP file
         pTemp = SDL_LoadBMP(aFileName);
//format pictures’ file
         *aImg = SDL_DisplayFormat(pTemp);
if (pTemp == NULL || aImg == NULL)
         {
printf("%s cann't initial", aFileName );
return 0;
         }
         //free temporary pointer
SDL_FreeSurface(pTemp);
return 1;
}


int initImg_PNG(const char *aFileName, SDL_Surface **aImg)
{
         SDL_Surface *pTemp;
//load picture filethe file must be BMP file
         pTemp = IMG_Load(aFileName);
//format pictures’ file
         *aImg = SDL_DisplayFormat(pTemp);
if (pTemp == NULL || aImg == NULL)
         {
printf("%s cann't initial", aFileName );
return 0;
         }
         //free temporary pointer
SDL_FreeSurface(pTemp);
return 1;
}


void showImg(SDL_Surface *aSource, int aLeft , int aTop , int aWidth , int aHeight , SDL_Surface *aDestination)
{
SDL_Rect picPosition;
picPosition.x = aLeft;
picPosition.y = aTop;
picPosition.w = (aWidth == 0)? aSource-> w : aWidth;
picPosition.h = (aHeight == 0)? aSource-> h : aHeight;
SDL_BlitSurface(aSource,NULL,aDestination,&picPosition);
}


int main(int argc, char* argv[])
{
InitAll();
InitGame();
initImg_BMP("1.bmp", &pic);
showImg(pic,0,0,0,0,screen);
SDL_Flip(screen);
SDL_Delay(4000);
}
#include #include //用键盘控制精灵移动 int main(int argc, char ** argv) { SDL_Surface * screen; //主表面 SDL_Surface * image; //用来放MM-----的图片信息(像素) SDL_Surface * PlayerImage; //用来测试的图片 SDL_Event event; Uint32 BeginTicks, EndTicks; SDL_Rect PRect, BRect; //PRect对应精灵的移动的小图位置(实现动画),BRect对应精灵在屏幕的位置。 unsigned char PlayerStarts = 0; unsigned char PlayerIndex = 0; bool bAppRun = true; //初始化SDL if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER) == -1) { fprintf(stderr, "SDL_Init %s\n", SDL_GetError()); return -1; } //初始化成功设置退出要调用的函数SDL_Quit atexit(SDL_Quit); //创建一个640X480 16-bit 模式的主表面 16位可以让MM的效果好看一点 screen = SDL_SetVideoMode(230, 230, 16, SDL_SWSURFACE); if (screen == NULL) { fprintf(stderr, "Couldn't set 640x480x8 video mode %s\n", SDL_GetError()); return -1; } //读取MM图片信息,并创建一个表面,并把数据填入该表面中。 image = SDL_LoadBMP("./mm.bmp"); //请在终端里运行该程序 if (image == NULL) { fprintf(stderr, "Couldn't load MM, %s\n", SDL_GetError()); //遗憾你不能显示MM了,不过你可以用图片浏览程序看。 return -1; } //读取player.bmp PlayerImage = SDL_LoadBMP("./player.bmp"); //请在终端里运行该程序 if (image == NULL) { fprintf(stderr, "Couldn't load MM, %s\n", SDL_GetError()); //遗憾你不能显示MM了,不过你可以用图片浏览程序看。 return -1; } //读取第一个像素 Uint8 key = *((Uint8 *)PlayerImage->pixels); //设置色键 SDL_SetColorKey(PlayerImage, SDL_SRCCOLORKEY, key); //有了MM的表面了,就可以显示了。 //将MM的表面画在我们的主表面上,用MM来作为背景 if (SDL_BlitSurface(image, NULL, screen, NULL) < 0) { //解释一下NULL,第一个是按照image的尺寸显示,第二个是默认显示。你也可以指定大小,不过要用到SDL_Rect你可以看一看帮助。 fprintf(stderr, "BlitSurface error: %s\n", SDL_GetError()); //看看提示吧 return -1; } PRect.x = 0; //初始化动画显示图片。 PRect.y = 0; PRect.w = 32; PRect.h = 48; BRect.x = 0; //初始化精灵的位置。 BRect.y = 0; BRect.w = 32; BRect.h = 48; //贴上测试用的表面 if (SDL_BlitSurface(PlayerImage, &PRect, screen, &BRect) w, image->h); BeginT
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mynameislinduan

你的鼓励是我最大动力写博客不易

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值