SDL2加载一个图片

一、概述

  使用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();



}

 

三、演示图片

 

posted on 2023-11-14 14:24  飘杨......  阅读(56)  评论(0编辑  收藏  举报