一、概述
使用SDL2+SDL2_Image显示一张图片
操作步骤:
SDL2的操作流程:
1.初始化SDL SDL_Init
2.创建SDL_Window SDL_CreateWindow
3.创建渲染器SDL_Renderer SDL_CreateRenderer
4.生成一个SDL_Surface,这个Surface直接通过IMG_Load中加载图片获得
a.先初始化SDL2_Image,IMG_Init
b.把图片加载到surface缓冲区,IMG_Load(“图片路径”)
5.创建SDL_Texture,这个texture从SDLSurface中获得,通过SDL_CreateTextureFromSurface
6.把问题贴到渲染器上,SDL_RenderCopy
7.把渲染器中的数据渲染到显示屏上,SDL_RenderPresent
8.对使用到的资源进行逐个销毁
大概流程如下:
二、代码示例
#include "../include/sdl_show_image.h" #include <opencv2/opencv.hpp> using namespace cv; using namespace std; /* 构造函数 */ SdlShowImage::SdlShowImage() { //初始化SDL SDL_Init(SDL_INIT_EVERYTHING); //创建一个Surface SDL_Surface* surface = IMG_Load("E:/tony/demo/visualstudio_workspace/SDLDemo/SDLDemo/images/cat2.jpg"); //创建SDL窗口 SDL_Window* window = SDL_CreateWindow("window name", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, surface->w,surface->h,0); //初始化SDL_IMAGE(这个主要是为了方便加载图片) IMG_Init(IMG_INIT_PNG|IMG_INIT_JPG); //创建渲染器 SDL_Renderer* renderer = SDL_CreateRenderer(window,-1,0); //创建纹理 SDL_Texture* texture = SDL_CreateTextureFromSurface(renderer,surface); //把纹理渲染到渲染器上 SDL_RenderCopy(renderer,texture,NULL,NULL); //把渲染器中的数据渲染到屏幕上 SDL_RenderPresent(renderer); //单位是毫秒(如果不加这个图像显示后会立马关闭) SDL_Delay(3000); //执行销毁动作 //销毁纹理 SDL_DestroyTexture(texture); //释放surface SDL_FreeSurface(surface); //销毁渲染器 SDL_DestroyRenderer(renderer); //销毁window SDL_DestroyWindow(window); //退出SDL_Image库 IMG_Quit(); //退出SDL SDL_Quit(); }
三、演示图片
标签:渲染器,IMG,SDL2,surface,window,SDL,加载,图片 From: https://www.cnblogs.com/tony-yang-flutter/p/17831503.html