当前位置: 首页 > news >正文

SDL渲染RGB图像

一什么是SDL

在 FFmpeg 中,使用 SDL 来初始化视频和音频播放器,并将音频和视频数据从 FFmpeg 解码器中读取出来,再通过 SDL 进行处理和显示。

二SDL渲染图像的步骤

先要进行初始化接口,第二部创建一个窗口或者绑定一个窗口句柄,第三步创建一个渲染器,第四步是在这个渲染器中创建一个材质,创建完材质之后需要显示,显示涉及四个步骤,首先就是清屏,更新材质,把内存中的数据传进来,再把材质数值复制到我们的渲染区,最后进行渲染显示。

  1. srcrect:
    • 类型:const SDL_Rect *
    • 描述:指向源矩形的指针,指定从纹理中复制的区域。如果为 NULL,则使用整个纹理作为源区域。
  1. dstrect:
    • 类型:const SDL_Rect *
    • 描述:指向目标矩形的指针,指定将纹理渲染到的目标区域。如果为 NULL,则纹理会被渲染到整个渲染目标(通常是整个窗口)。

 实际设置了20ms间隔发生一次,那么一秒就是50帧,设置了帧率,1s=1000ms,那么20ms发生一次,那么1000/20=50次,发生了50次,那么对应到视频图片就是50帧(但是只是理想情况下)

#include <iostream>
#include <sdl/SDL.h>
using namespace std;
#pragma comment(lib,"SDL2.lib")
#undef mainint main(int argc, char* argv[])
{int w = 800;int h = 600;//1 初始化SDL video库if (SDL_Init(SDL_INIT_VIDEO)){cout << SDL_GetError() << endl;return -1;}//2 生成SDL 窗口auto screen = SDL_CreateWindow("test sdl ffmpeg",SDL_WINDOWPOS_CENTERED,//窗口位置SDL_WINDOWPOS_CENTERED,w,h,SDL_WINDOW_OPENGL|SDL_WINDOW_RESIZABLE);if (!screen){cout << SDL_GetError() << endl;return -2;}//3 生成渲染器auto render = SDL_CreateRenderer(screen, -1, SDL_RENDERER_ACCELERATED);if (!render){cout << SDL_GetError() << endl;return -3;}//4 生成材质auto texture = SDL_CreateTexture(render, SDL_PIXELFORMAT_ARGB8888,SDL_TEXTUREACCESS_STREAMING,// 可加锁w, h);if (!texture){cout << SDL_GetError() << endl;return -4;}// 存放图像的数据//智能指针分配和管理内存shared_ptr<unsigned char> rgb(new unsigned char[w * h * 4]);//使用智能指针,不用释放对象auto r = rgb.get();//返回原始指针unsigned char tmp = 255;for (;;){//判断退出SDL_Event ev;SDL_WaitEventTimeout(&ev, 10);//增加时间控制帧率 100帧每秒if (ev.type == SDL_QUIT){SDL_DestroyWindow(screen);break;}tmp--;for (int j = 0; j < h; j++){int b = j * w * 4;for (int i = 0; i < w*4; i += 4){//r指针相当于顺序存储在一维数组中r[b + i] = 0;           //Br[b + i + 1] = 0;       //Gr[b + i + 2] = tmp;     //Rr[b + i + 3] = 0;       //A}}//5 内存数据写入材质SDL_UpdateTexture(texture, NULL, r, w * 4);//NULL表示整幅图 //6 清理屏幕SDL_RenderClear(render);SDL_Rect sdl_rect;sdl_rect.x = 0;sdl_rect.y = 0;sdl_rect.w = w;sdl_rect.h = h;//7 复制材质到渲染器SDL_RenderCopy(render, texture,NULL,//原图位置和尺寸&sdl_rect//目标位置和尺寸);//8 渲染SDL_RenderPresent(render);}getchar();return 0;
}

http://www.lqws.cn/news/531145.html

相关文章:

  • 高通手机跑AI系列之——穿衣试装算法
  • YOLOv10tensorRT推理代码C++
  • 虚拟化测试工具Parasoft Virtualize的两大核心功能及应用
  • 如何写出优秀的单元测试?
  • 【附源码】旅游网站系统设计与实现+SpringBoot + Vue (前后端分离)
  • 设计模式 | 建造者模式
  • 【机器学习深度学习】线性代数
  • 提升开发思维的设计模式(下)
  • Apache 支持 HTTPS
  • 【Linux】软硬链接,动静态库
  • 流程管理整体章程性方案及流程中的各种操作的定义和说明
  • 2025学年湖北省职业院校技能大赛 “信息安全管理与评估”赛项 样题卷(四)
  • 【机器学习深度学习】线性回归
  • SpringBoot 中使用 @Async 实现异步调用​
  • 详解零拷贝
  • IDEA + Spring Boot + javadoc 实例应用
  • MyBatis深度面试指南
  • MQTT 和 HTTP 有什么本质区别?
  • Lynx vs React Native vs Flutter 全面对比:三大跨端框架实测分析
  • flutter的包管理#资源管理#调试Flutter应用#Flutter异常捕获
  • OpenCV边缘填充方式详解
  • ffmpeg中Avfilter组件drawbox和drawgrid的bug
  • 远程面试平台选声网视频通话提升候选人体验感
  • 编写CSS的格式
  • 2025学年湖北省职业院校技能大赛 “信息安全管理与评估”赛项 样题卷(五)
  • 【STM32】外部中断
  • HTTP协议-后端接收请求
  • CRON表达式编辑器与定时任务实现技术文档
  • Sonarqube:Jenkins触发sonar扫描出现UnsupportedClassVersionError错误处理
  • EXILIUM×亚矩云手机:重构Web3虚拟生存法则,开启多端跨链元宇宙自由征途