首页 > 其他分享 >SDL2加载一个图片

SDL2加载一个图片

时间:2023-11-14 14:33:25浏览次数:37  
标签:渲染器 IMG SDL2 surface window SDL 加载 图片

一、概述

  使用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

相关文章

  • SDL2 无法解析的外部符号 main,函数 "int __cdecl invoke_main(void)" (?invoke_main@@
    一、概述在使用VisualStudio+CMake集成SDL2的过程中。运行一个Demo示例出现了以下错误提示无法解析的外部符号main,函数"int__cdeclinvoke_main(void)"(?invoke_main@@YAHXZ) 二、解决办法上面问题的主要原因是程序找不到入口函数因为SDL中自己也定义了......
  • 当前不会命中断点 未加载该文档 解决方法总结
    1.工具->选项->调试->常规 2.项目属性页 3.项目属性页 4.项目属性页 ......
  • 加载网络映射盘中的assembly失败的处理办法
     2023年11月14日10:36:28有群友提出这样的问题:我在客户的机器安装插件后,报这个错,大概会是什么原因的?按照提示信息,打开微软的网页:http://go.microsoft.com/fwlink/?LinkId=155569同时也搜索到了这篇文章:https://www.cnblogs.com/1175429393wljblog/p/5065559.html上面这......
  • Vue3实现图片滚轮缩放和拖拽
    在项目开发中遇到一个需求:1:用鼠标滚轮可对图片进行缩放处理2:点击按钮可对图片进行缩放处理3:可对图片进行拖拽处理 我在开发中通过自己实现与百度查看优秀的铁子进行了两种类型的使用  <template><divref="imgWrap"class="wrap"@mousewheel.prevent="rollImg"......
  • python读取图片读不出来
    乐,代码没问题,还是不停的提示图片不存在或者图片失效于是乎,检查python默认工作目录:pythonimportosprint(os.getcwd())运行得知是用户名主目录然后把图片放到该目录就行了一想到这种问题就乐 importos print(os.getcwd()) importos print......
  • :key可以不加,如果不加:key属性,刷新页面时,可能由于key相同,图片不刷新。
    件中使用vue-lazyload时,v-lazy代替v-bind:src实现图片懒加载可以使用key属性不是必须的,但是不写key可能报警告,有些内容可能显示异常。key的作用:提高性能,不影响显示效果(如果没有id,可以使用index代替)......
  • 【Angular】Angular中的急加载、惰性加载、预加载
    急加载(Eagerloading)import{NgModule}from'@angular/core';import{RouterModule,Routes}from'@angular/router';import{CountryComponent}from'./country.component';import{CountryListComponent}from'./count......
  • HTML和webAPI之根据时间和事件来变实现图片的转换
    一:概述在一些前端的设计场景中,我们会发现有很多的场景需要根据时间然后去变换图片。在不同时间都会出现不同的图片。下面来写一个案例,来更换图片,并显示当前的时间(xx年xx月xx日)。二:案例实现在这里需要用到的知识是事件的使用以及JavaScript内置对象(时间函数)的使用。以及时间的......
  • 银行支付凭证截图生成器在线,工商邮政农业招商建设,画板+透明标签+图片框
    用易语言设计了一个非常牛X的截图生成器,娱乐使用哈,软件我在这里也不会分享,模版网上找的,百度图库搜到的,上面的LOGO用的是一个在线生成器,然后标签用的黑月透明标签,加一个通用对话框读取图片文件夹到编辑框,自动写入到Logo图片框,参数输入框的编辑框对应着模版上指定信息的透明标签,单选......
  • 中国银行模拟器app,用java设计框架,图片网上找的,提供代码,仅供娱乐
    回执单生成器的Java程序需要涉及到一些基本的Java编程技能,包括创建类、处理用户输入和格式化输出。下面是一个简单的示例代码,用于生成一个简易的回执单。这个程序将接收用户的输入,然后生成一个格式化的回执单。请注意,这个示例是基础的,并没有实现完整的错误处理或复杂的用户界面。......