读书人

SDL学习(3)

发布时间: 2013-02-19 11:11:40 作者: rapoo

SDL学习(三)

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

(1) 添加SDL_image库

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

添加方法与#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 loadedSDL_Surface *loadedImage = NULL;// The optimized image that will be usedSDL_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 imageoptimizedImage = SDL_DisplayFormat(loadedImage); // 该函数将图片格式转换为与screen相同的格式// Free the old imageSDL_FreeSurface(loadedImage);}// Return the optimized imagereturn optimizedImage;}void apply_surface(int x, int y, SDL_Surface *source, SDL_Surface *destination){// Make a temporary rectangle to hold the offsetsSDL_Rect offset;// Give the offsets to the rectangle, 这个偏移是以左上角为原点的偏移量offset.x = x;offset.y = y;// Blit the surfaceSDL_BlitSurface(source, NULL, destination, &offset);}int main(int argc, char *argv[]){// Initialize all SDL subsystemsif (SDL_Init(SDL_INIT_EVERYTHING) == -1){return 1;}// Set up the screenscreen = SDL_SetVideoMode(SCREEN_WIDTH, SCREEN_HEIGHT, SCREEN_BPP, SDL_SWSURFACE);// If there was an error in setting up the screenif (screen == NULL){return 1;}// Set the window captionSDL_WM_SetCaption("Hello World", NULL);// Load imagesmessage = 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 screenapply_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 screenapply_surface(180, 140, message, screen);// Update the screenif (SDL_Flip(screen) == -1){return 1;}// Wait 2 secondsSDL_Delay(2000);// Free the surfacesSDL_FreeSurface(message);SDL_FreeSurface(background);// Quit SDLSDL_Quit();// Returnreturn 0;}


读书人网 >编程

热点推荐