当前位置: 代码迷 >> 编程 >> SDL学习(3)
  详细解决方案

SDL学习(3)

热度:4930   发布时间:2013-02-26 00:00:00.0
SDL学习(三)

本文优化上文所给出的显示bmp图片的程序,并且通过添加新的库文件,使得SDL支持更多的图片格式。

 (1) 添加SDL_image库

下载地址:http://www.libsdl.org/projects/SDL_image/

添加方法与SDL学习(一)中介绍的相同,这里不再重复。

 (2) 测试

 测试代码如下所示:

#include "SDL.h"#include "SDL_image.h"#include <string>// The attributes of the screenconst int SCREEN_WIDTH = 640;const int SCREEN_HEIGHT = 480;const int SCREEN_BPP = 32;// The surfaces that will be usedSDL_Surface *message = NULL;SDL_Surface *background = NULL;SDL_Surface *screen = NULL;SDL_Surface *load_image(std::string  filename) // 加载图片函数{	// Temporary storage for the image that's loaded	SDL_Surface *loadedImage = NULL;	// The optimized image that will be used	SDL_Surface *optimizedImage = NULL;	// Load the image	//loadedImage = SDL_LoadBMP(filename.c_str()); // 该函数只支持bmp图片格式	loadedImage = IMG_Load(filename.c_str()); // 该函数支持BMP, PNM, XPM, LBM, PCX, GIF, JPEG, TGA, PNG格式的图片 	if (loadedImage != NULL)		{		// Create an optimized image		optimizedImage = SDL_DisplayFormat(loadedImage); // 该函数将图片格式转换为与screen相同的格式		// Free the old image		SDL_FreeSurface(loadedImage);	}	// Return the optimized image	return optimizedImage;}void apply_surface(int x, int y, SDL_Surface *source, SDL_Surface *destination){	// Make a temporary rectangle to hold the offsets	SDL_Rect offset;	// Give the offsets to the rectangle, 这个偏移是以左上角为原点的偏移量	offset.x = x;	offset.y = y;	// Blit the surface	SDL_BlitSurface(source, NULL, destination, &offset);}int main(int argc, char *argv[]){	// Initialize all SDL subsystems	if (SDL_Init(SDL_INIT_EVERYTHING) == -1)	{		return 1;	}	// Set up the screen	screen = SDL_SetVideoMode(SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_BPP, SDL_SWSURFACE);	// If there was an error in setting up the screen	if (screen == NULL)	{		return 1;	}	// Set the window caption	SDL_WM_SetCaption("Hello World", NULL);	// Load images	message = load_image("F:/program/SDL/examples/Init/Debug/lyf.jpg");	background = load_image("F:/program/SDL/examples/Init/Debug/background.bmp");	// Apply the background to the screen	apply_surface(0, 0, background, screen);	//apply_surface(320, 0, background, screen);	//apply_surface(0, 240, background, screen);	//apply_surface(320, 240, background, screen);	// Apply the message to the screen	apply_surface(180, 140, message, screen);	// Update the screen	if (SDL_Flip(screen) == -1)	{		return 1;	}	// Wait 2 seconds	SDL_Delay(2000);	// Free the surfaces	SDL_FreeSurface(message);	SDL_FreeSurface(background);	// Quit SDL	SDL_Quit();	// Return	return 0;}


 

 

  相关解决方案