SDL是一个跨平台的多媒体库,它通过OpenGL和2D视频帧缓冲,提供了针对音频、视频、键盘、鼠标、控制杆及3D硬件的低级别的访问接口。这里使用较新的SDL2库。
1. 配置SDL开发环境
1.1 下载SDL开发库
下载地址:http://www.libsdl.org/download-2.0.php;选择SDL2-devel-2.0.10-VC.zip。解压后的目录如下:

1.2 配置环境
使用VS新建一个C++控制台工程,并做如下配置:
- 将解压后的SDK库拷贝到工程目录下,然后配置VS工程;
- "C/C++"-->"常规"-->"附加包目录",填入SDL的相对include目录;

- "链接器"-->"常规"-->"附加库目录",填入SDL的相对lib目录。

- "C++"-->"代码生成"-->"运行库",选择"多线程 DLL(/MD)"

- "链接器"-->"系统"-->"子系统"更改为"窗口"

最后,为了不每次都需要将dll拷贝到exe所在目录,配置"调试"-->"环境",设置为"PATH=sdl/lib/x86;%PATH%",但是要注意如果是直接运行exe,还需要将对应的dll拷贝到和exe一起。
2. 编写代码实现
首先,通过以下代码验证SDL配置成功:
#include "SDL.h" #pragma comment(lib, "SDL2.lib") #pragma comment(lib, "SDL2main.lib") int main(int argc, char* args[]) { //启动SDL SDL_Init(SDL_INIT_EVERYTHING); //退出SDL SDL_Quit(); return 0; }
使用SDL2需要注意几点:
- 和sdl 1.x版本有些接口差别较大,不能直接套用;
- 没有对SDL进行初始化,则无法调用任何SDL函数;
- 退出前注意释放资源。
下面是使用SDL2显示一张bmp图片的代码:
#include "SDL.h" #include <iostream> #pragma comment(lib, "SDL2.lib") #pragma comment(lib, "SDL2main.lib") int main(int argc, char* args[]) { //窗口含有的surface SDL_Surface* screenSurface = NULL; //初始化SDL if (SDL_Init(SDL_INIT_VIDEO) < 0) { printf("SDL could not initialize! SDL_Error: %s\n", SDL_GetError()); } else { //创建 window SDL_Window *window = SDL_CreateWindow("ShowPicture", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 640, 480, SDL_WINDOW_SHOWN); if (window == NULL) { printf("Window could not be created! SDL_Error: %s\n", SDL_GetError()); } else { //渲染层 SDL_Renderer * renderer = SDL_CreateRenderer(window, -1, 0); SDL_Surface *pic = SDL_LoadBMP("sdl_test.bmp"); //载入的图片生成SDL材质 SDL_Texture * texture = SDL_CreateTextureFromSurface(renderer, pic); //把材质复制到渲染器 SDL_RenderCopy(renderer, texture, NULL, NULL); //显示出来 SDL_RenderPresent(renderer); bool quit = false; SDL_Event event; while (!quit) {//主消息循环 SDL_WaitEvent(&event); switch (event.type) { //用户从菜单要求退出程序 case SDL_QUIT: quit = true; break; } } // 清理资源 SDL_DestroyTexture(texture); SDL_FreeSurface(pic); SDL_DestroyRenderer(renderer); SDL_DestroyWindow(window); } } //退出SDL SDL_Quit(); return 0; }

如果要显示jpg等其他格式的图片,需要引入image库(同样要下载sdl2_image库):
//引入image库 IMG_Init(IMG_INIT_JPG); SDL_Surface * image = IMG_Load("*.png"); //退出image库 IMG_Quit();
如果需要指定图片的渲染位置,可以这样实现:
SDL_Rect dstrect = { 5, 5, 320, 240 }; SDL_RenderCopy(renderer, texture, NULL, &dstrect); SDL_RenderPresent(renderer);
总体流程:
来源:https://www.cnblogs.com/xl2432/p/11707933.html