1、源码
#include <iostream>
#include <SDL2/SDL.h>
#include <SDL2/SDL_image.h>
int main() {
// 初始化SDL
if (SDL_Init(SDL_INIT_VIDEO) != 0) {
std::cerr << "SDL_Init failed: " << SDL_GetError() << std::endl;
return -1;
}
// 初始化SDL_image
if ((IMG_Init(IMG_INIT_PNG) & IMG_INIT_PNG) != IMG_INIT_PNG) {
std::cerr << "IMG_Init failed: " << IMG_GetError() << std::endl;
SDL_Quit();
return -1;
}
// 创建窗口
const int iStart_x = 0;
const int iStart_y = 0;
SDL_Window* m_window = SDL_CreateWindow("Image Viewer", iStart_x, iStart_y, 800, 600, SDL_WINDOW_SHOWN);
if (!m_window) {
std::cerr << "SDL_CreateWindow failed: " << SDL_GetError() << std::endl;
IMG_Quit();
SDL_Quit();
return -1;
}
// 创建SDL渲染器
SDL_Renderer* m_renderer = SDL_CreateRenderer(m_window, -1, SDL_RENDERER_ACCELERATED | SDL_RENDERER_PRESENTVSYNC);
if (!m_renderer) {
std::cerr << "创建SDL渲染器失败: " << SDL_GetError() << std::endl;
SDL_DestroyWindow(m_window);
IMG_Quit();
SDL_Quit();
return -1;
}
// 加载PNG图片
SDL_Surface* imageSurface = IMG_Load("startup.png");
if (!imageSurface) {
std::cerr << "IMG_Load failed: " << IMG_GetError() << std::endl;
SDL_DestroyRenderer(m_renderer);
SDL_DestroyWindow(m_window);
IMG_Quit();
SDL_Quit();
return -1;
}
// 创建SDL纹理
SDL_Texture* imageTexture = SDL_CreateTextureFromSurface(m_renderer, imageSurface);
if (!imageTexture) {
std::cerr << "SDL_CreateTextureFromSurface failed: " << SDL_GetError() << std::endl;
SDL_FreeSurface(imageSurface);
SDL_DestroyRenderer(m_renderer);
SDL_DestroyWindow(m_window);
IMG_Quit();
SDL_Quit();
return -1;
}
SDL_FreeSurface(imageSurface); // 释放表面
// 清空渲染器
SDL_RenderClear(m_renderer);
// 渲染纹理
SDL_RenderCopy(m_renderer, imageTexture, NULL, NULL);
// 刷新屏幕
SDL_RenderPresent(m_renderer);
// 处理事件
SDL_Event event;
bool quit = false;
while (!quit) {
while (SDL_PollEvent(&event) != 0) {
if (event.type == SDL_QUIT) {
quit = true;
}
}
SDL_Delay(10); // 小延迟以减少CPU使用率
}
// 清理资源
SDL_DestroyTexture(imageTexture);
SDL_DestroyRenderer(m_renderer);
SDL_DestroyWindow(m_window);
IMG_Quit();
SDL_Quit();
return 0;
}
2、安装sdl_image库
sudo apt-get install libsdl2-image-dev
sudo apt-get install libsdl2-dev
3、链接库
LIBS += -lSDL2 -lSDL2_image