(转)SDL2.0在mfc窗口中显示yuv的一种方法
DWORD ThreadFun()
//用mfc窗口句柄创建一个sdl window
SDL_Window * pWindow = SDL_CreateWindowFrom( (void *)( GetDlgItem(IDC_STATIC1)->GetSafeHwnd() ) );
SDL_Rect sdlRT;
sdlRT.h = 288;
sdlRT.w = 352;
sdlRT.x = 0;
sdlRT.y = 0;
SDL_Rect dstRT;
dstRT.h = 288;
dstRT.w = 352;
dstRT.x = 0;
dstRT.y = 0;
int iW = 352;
int iH = 288;
char szData[352*288*2] = {0};
char szPrint[256] = {0};
//计算yuv一行数据占的字节数
int iPitch = iW*SDL_BYTESPERPIXEL(SDL_PIXELFORMAT_YV12);
int iWidth = 0;
int iHeight = 0;
SDL_GetWindowSize( pWindow, &iWidth, &iHeight );
dstRT.h = iHeight;
dstRT.w = iWidth;
//获取当前可用画图驱动 window中有3个,第一个为d3d,第二个为opengl,第三个为software
int iii = SDL_GetNumRenderDrivers();
//创建渲染器,第二个参数为选用的画图驱动,0代表d3d
SDL_Renderer * pRender = SDL_CreateRenderer( pWindow, 0, SDL_RENDERER_ACCELERATED );
sprintf( szPrint, "%s", SDL_GetError());
SDL_RendererInfo info;
SDL_GetRendererInfo(pRender, &info);
SDL_GetRenderDriverInfo(0, &info); //d3d
SDL_GetRenderDriverInfo(1, &info); //opgl
SDL_GetRenderDriverInfo(2, &info); //software
char szInfo[256] = {0};
sprintf(szInfo, "%s", info.name);
sprintf( szPrint, "%s", SDL_GetError());
//创建纹理
SDL_Texture * pTexture = SDL_CreateTexture( pRender,SDL_PIXELFORMAT_YV12, SDL_TEXTUREACCESS_STREAMING, iW, iH );
FILE * pFile = fopen( "d:\\cap1.yuv", "rb" );
if ( pFile == NULL )
{
int u = 0;
}
//读yuv文件,该文件中存放的数据尺寸为 352*288的yv12数据
while ( fread( szData, 1, iW*iH*3/2, pFile ) != NULL )
{
int i = SDL_UpdateTexture( pTexture, &sdlRT, szData, iPitch );
SDL_RenderClear( pRender );
SDL_RenderCopy( pRender, pTexture, &sdlRT, &dstRT );
SDL_RenderPresent( pRender );
Sleep(40);
}
fclose(pFile);
if ( pTexture != NULL )
{
SDL_DestroyTexture( pTexture );
pTexture = NULL ;
}
if ( pRender != NULL )
{
SDL_DestroyRenderer( pRender );
pRender = NULL;
}
if ( NULL != pWindow )
{
SDL_DestroyWindow( pWindow );
pWindow = NULL;
}
}
注意在SDL_CreateWindowFrom中sdl将窗口的消息处理函数地址给改写成sdl的函数了(在sdl源文件中SetupWindowData()此函数内修改),
![](http://img5.ph.126.net/6uhSV7JtCzhHVbAFlHYRkA==/2560014913201149195.jpg)
对SDL的使用还在摸索中,不能保证上述知识全部正确,如哪位仁兄发现问题,请留言更正,再次谢过了!
(转)SDL2.0在mfc窗口中显示yuv的一种方法的更多相关文章
- 【转载】SDL2.0在mfc窗口中显示yuv的一种方法
DWORD ThreadFun(){ //用mfc窗口句柄创建一个sdl window SDL_Window * pWindow = SDL_CreateWindowFrom( (void ...
- 树莓派linux系统中显示隐藏文件的几种方法
一.如果直接使用可视化文件管理器 1.直接点击右键,直接选择“显示隐藏文件”选项. 2.快捷键 CTRL + H 二.在终端命令行模式下 可以使用ls命令的-a参数来显示隐藏的文件及文件夹. ls - ...
- windows下ruby中显示中文的3种方法
A: 1将x.rb编码为ascii格式 2 在x.rb开头加上 #code:gbk或者 #coding:gbk B: 1 将x.rb编码为utf-8格式 2 在x.rb开头加上 #code:utf-8 ...
- mysql数据库导出模型到powerdesigner,PDM图形窗口中显示数据列的中文注释
1,mysql数据库导出模型到powerdesigner 2,CRL+Shift+X 3,复制以下内容,执行 '******************************************** ...
- MFC对话框中显示BMP,JPG图片
//************************************ // 方法说明: 显示JPG和GIF.BMP图片 // 参数说明: CDC * pDC 设 ...
- MFC对话框中显示背景图片
在MFC对话框中显示图片,四个步骤. 1.首先得在VC6.0或者VS2008(其他版本也是一样)中导入GDI文件.(网上下载:) GDI含义是图形设备接口,主要任务是负责系统与绘图程序之间的信息交换, ...
- 转 在PowerDesigner的PDM图形窗口中显示数据列的中文注释
Name是名称(字段描述),Code是字段名称,Comment是注释名称,ER图中显示的是Name.一般设计时,Name跟comment都设计成描述, 而设计时候常把comment写成中文,name保 ...
- Frameset框架,在同一个浏览器窗口中显示不止一个页面
总结一下.通过使用Frameset框架,可以在同一个浏览器窗口中显示不止一个页面. 先举个例子: 1 <frameset rows="100,*" cols="*& ...
- OpenGL编程逐步深入(三)在窗口中显示一个三角形
这一节教程的内容会比较少,我们仅仅是对上一节教程中的代码进行扩展,在窗口中渲染一个三角形出来. 本节我们以下图所示正方形来讲解OpenGl中的坐标系统.当沿着Z轴负方向看时,可见顶点的坐标必须在这个正 ...
随机推荐
- C# 获取方法内参数名称
public partial class Main : Form { public Main() { foreach(var parameter in typeof(Main).GetMethod(& ...
- mysql格式化日期
mysql查询记录如果有时间戳字段时,查看结果不方便,不能即时看到时间戳代表的含义,现提供mysql格式换时间函数,可以方便的看到格式化后的时间. 1. DATE_FORMAT() 函数用于以不同的格 ...
- Mac 下的矢量图设计工具
Mac 下的矢量图设计工具 一图胜千言.一张清晰的示意图无论对于系统设计,流程梳理,还是其他的方方面面,都非常重要. 曾经亲见一位老同事把 FreeHand 这个矢量绘图工具用得出神入化,并且非常成功 ...
- 批处理学习笔记2 - 编写批处理的for循环
批处理中的for循环集成的功能比较多,可以直接对文件操作. ====================================================================== ...
- 【Android】3.13 路径规划功能
分类:C#.Android.VS2015.百度地图应用: 创建日期:2016-02-04 一.简介 线路规划支持以下功能: 公交信息查询:可对公交详细信息进行查询: 公交换乘查询:根据起.终点,查询策 ...
- Linux minilogd占用内存过高及开机启动项修改
minilogd: 今天发现一台服务起的内存正常占用应该在70左右,但是内存占用却到了90%以上,用top查看发现minilogd占用了30%左右的内存,是不符合预期的,查看开机启动项并无minilo ...
- 利用Python imaplib和email模块 读取邮件文本内容及附件内容
python使用imap接收邮件的过程探索 https://www.cnblogs.com/yhlx/archive/2013/03/22/2975817.html #! encoding:utf8 ...
- centos7 ping: www.baidu.com: Name or service not known
[root@www ~]# ping www.baidu.com ping: www.baidu.com: Name or service not known [root@www ~]# 1.网络配置 ...
- python 列表的内容赋值
l1 = '20180201 b4b8e187-d59d-33fb-addc-ef189aca3712 com.ss.android.article.news' l2 = re.split('[ ]+ ...
- JS地毯式学习一
1.<noscript> 现代浏览器都对JavaScript进行了支持,一般是在用户的浏览器禁用了脚本的情况下才会显示<noscript>的内容. 包含在<noscrip ...