SDL2:第二个程序(Mac):显示BMP位图

继上一个SDL2程序(SDL2:第一个程序(Mac)),我们使用SDL2打开了一个黑色的窗口。

世界应该是彩色的,怎么能让黑色霸占呢,是时候让阳光驱逐黑暗了,今天,我要用SDL2显示一张图片。

为此,我花重金请了位模特,拍了张照片。我待会儿就要让小王子进入SDL的世界。

SDL2:第二个程序(Mac):显示BMP位图_第1张图片

代码

还是第一个程序的代码,只不过在上面稍作修改。

首先是CMakeLists.txt文件

cmake_minimum_required(VERSION 3.10)
project(PlaySDL)

set(CMAKE_CXX_STANDARD 11)
set(SDL_DIR /usr/local/Cellar/sdl2/2.0.9_1/)
include_directories(${SDL_DIR}/include/)
link_libraries(${SDL_DIR}/lib/)

add_executable(PlaySDL main.cpp)

target_link_libraries(PlaySDL SDL2 SDL2_test SDL2main)

什么都没改,但为了不让你回到第一篇文章去看,我还是贴在这里了。

下面是代码部分,只做了点小修改:

#include 
extern "C" {
#include 
#include 
}
using namespace  std;

const int WIDTH = 960, HEIGHT = 540;
int main() {
    SDL_Surface *imageSurface = NULL; // 申明用于加载图片的SDL_Surface
    SDL_Surface *windowSurface = NULL; // 申明用于窗体相关的SDL_Surface
    if (SDL_Init(SDL_INIT_EVERYTHING) < 0) {
        cout << "SDL could not initialized with error: " << SDL_GetError() << endl;
    }
    SDL_Window *window = SDL_CreateWindow("Hello SDL world!", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, WIDTH, HEIGHT, SDL_WINDOW_ALLOW_HIGHDPI);
    if (NULL == window) {
        cout << "SDL could not create window with error: " << SDL_GetError() << endl;
    }

    windowSurface = SDL_GetWindowSurface(window);
    imageSurface = SDL_LoadBMP("little_prince.bmp");
    if (NULL == imageSurface) {
        cout << "SDL could not load image with error: " << SDL_GetError() << endl;
    }
    SDL_Event windowEvent;
    while(true) {
        if (SDL_PollEvent(&windowEvent)) {
            if (SDL_QUIT == windowEvent.type) {
                cout << "SDL quit!!" << endl;
                break;
            }
        }
        SDL_BlitSurface(imageSurface, NULL, windowSurface, NULL);
        SDL_UpdateWindowSurface(window);
    }

    imageSurface = NULL;
    windowSurface = NULL;
    SDL_DestroyWindow(window);
    SDL_Quit();
    return 0;
}

little_prince.bmp需要是真正的bmp格式图片。SDL默认值支持bmp格式的,如果使用其他格式的图片,你可能拿到的是些乱七八糟的东西。

至于怎么使用SDL展示其它格式的图片,下一篇文章中会讲。

看一下运行效果:

加载出来了,小王子战胜了黑暗世界。

代码调用流程

SDL2:第二个程序(Mac):显示BMP位图_第2张图片
代码流程图中,黄色部分函数调用,是从第一个程序copy过来的,它几乎是所有SDL程序的必要流程了,要丰富SDL程序,都是在黄色框架之间扩充功能和代码,相关函数解释可以查看:

SDL2常用函数&结构分析:SDL_Init

SDL2常用函数&结构分析:SDL_Window&SDL_CreateWindow
SDL_Window

SDL2常用函数&结构分析:SDL_Event&SDL_PollEvent

绿色部分,是本次代码新增,用于显示BMP位图的极简逻辑,相关函数解释可以查看:

SDL2常用函数&结构分析:SDL_Surface&SDL_GetWindowSurface&SDL_LoadBMP

SDL2常用函数&结构分析:SDL_BlitSurface&SDL_UpdateWindowSurface

github地址

你可能感兴趣的:(MultiMedia,SDL,SDL2,显示BMP位图)