SDL 教程 02 : 在屏幕上贴一张图

2020-02-18  本文已影响0人  wjundong

示例代码

#include <SDL2/SDL.h>

const int SCREEN_WIDTH = 640;
const int SCREEN_HEIGHT = 480;

int main(int argc, char const *argv[])
{
    SDL_Window* window = NULL;

    /** SDL_Surface 只是一种图像数据类型,它包含图像的像素以及渲染该图像所需的所有数据
     *  SDL_Surface 使用软件渲染,这意味着它使用CPU进行渲染。硬件渲染图像是可以的,但是有点困难
     *  所以我们先用简单的方法来学习。在以后的教程中,我们将介绍如何渲染GPU加速图像 */

    // 该图层结构用来获取窗口的 surface
    SDL_Surface *screenSurface = NULL;
    // 该图层结构用于加载和显示图片的 
    SDL_Surface *imageSurface = NULL;

    // 初始化 SDL, 创建窗口
    if(SDL_Init(SDL_INIT_VIDEO) < 0)
    {
        printf( "SDL could not initialize! SDL_Error: %s\n", SDL_GetError() );
        exit(-1);
    }
    else
    {
        window = SDL_CreateWindow( "SDL Tutorial", SDL_WINDOWPOS_UNDEFINED, 
            SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN );
        if(window == NULL)
        {
            printf( "Window could not be created! SDL_Error: %s\n", SDL_GetError() );
            exit(-1);
        }
        else
        {
            screenSurface = SDL_GetWindowSurface( window );
        }
    }

    // SDL_LoadBMP 会加载图片会自动创建一个图层
    imageSurface = SDL_LoadBMP("hello_world.bmp");
    if(imageSurface == NULL)
    {
        printf( "Unable to load image ! SDL Error: %s\n", SDL_GetError() );
    }
    else 
    {
        /** SDL_BlitSurface 快速将一个位图块从一个地方传输到另一个地方
         *  SDL_BlitSurface 的第一个参数是源图层。第三个参数是目的图层
         *  我们将在以后的教程中再讨论第二个和第四个参数 */
        SDL_BlitSurface( imageSurface, NULL, screenSurface, NULL );
    }

    SDL_UpdateWindowSurface( window );
    SDL_Delay( 2000 );

    SDL_FreeSurface( imageSurface );
    SDL_DestroyWindow( window );
    SDL_Quit();

    return 0;
}

运行结果


运行结果.png

注: 你可以将代码

 imageSurface = SDL_LoadBMP("hello_world.bmp");

中图片地址改成自己测试的图片,注意图片格式必须是 bmp 格式的,要导入其他格式的图片后面会讲解,要用到 SDL_image 库

上一篇下一篇

猜你喜欢

热点阅读