SDL 教程 06 : 加载其他格式图片
2020-02-19 本文已影响0人
wjundong
示例代码
/**
* Title: 使用 SDL_image库 加载其他图片格式
*
* 本例中我们将通过 SDL_image 库来实现其他图片格式的加载,
* 同SDL_LoadBMP一样, IMG_Load 也从图片中新建一个图层并返回给用户
*/
#include <SDL2/SDL_image.h>
#include <SDL2/SDL.h>
#include <stdio.h>
#define sdlerror() { printf("error in line %d %s\n", __LINE__, SDL_GetError()); exit(-1); }
int main(int argc, char *argv[])
{
// 初始化
if(SDL_Init(SDL_INIT_VIDEO) < 0) sdlerror();
// 创建窗口
SDL_Window *window = SDL_CreateWindow( "SDL Tutorial", SDL_WINDOWPOS_UNDEFINED,
SDL_WINDOWPOS_UNDEFINED, 640, 480, SDL_WINDOW_SHOWN );
/**
* 在使用 SDL_image 前,我们需要进行初始化, 如果初始化成功,则返回其参数
* 这里初始化 IMG 为 支持 PNG, 该参数可以支持或运算以同时支持多种图片
* 比如同时支持 PNG 和 JPG 可以这样写参数 IMG_INIT_PNG | IMG_INIT_JPG
*/
if(IMG_Init(IMG_INIT_PNG) != IMG_INIT_PNG)
sdlerror();
// 从文件中加载图片
SDL_Surface *pngSurface = IMG_Load("loaded.png");
if(pngSurface == NULL)
sdlerror();
// 获取窗口图层
SDL_Surface *screenSurface = SDL_GetWindowSurface(window);
// 变换成窗口图层格式的图形
SDL_Surface *newPngSurface = SDL_ConvertSurface( pngSurface, screenSurface->format, 0 );
SDL_FreeSurface(pngSurface);
pngSurface = NULL;
//贴到主屏幕
SDL_BlitSurface( newPngSurface, NULL, screenSurface, NULL );
SDL_UpdateWindowSurface(window);
SDL_Event event;
while( SDL_PollEvent( &event ) != 0 || event.type != SDL_QUIT);
SDL_DestroyWindow(window);
SDL_FreeSurface(newPngSurface);
SDL_Quit();
return 0;
}
运行结果
运行结果.png教程所用图片
loaded.png