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
上一篇下一篇

猜你喜欢

热点阅读