资源简介
YUV播放器,directX,VS2008 MFC完成
能够很好的完成播放,能截取指定的帧。

代码片段和文件信息
#include “StdAfx.h“
#include “Draw.h“
Draw::Draw()
{
lpDDSPrimary=NULL;
lpDDSBack=NULL;
lpDD=NULL;
makeWindow();
}
Draw::~Draw()
{
if(lpDD != NULL)
{
if(lpDDSPrimary != NULL)
{
lpDDSPrimary->Release();
lpDDSPrimary = NULL;
}
if (lpDDSBack!=NULL)
{
lpDDSBack->Release();
lpDDSBack=NULL;
}
lpDD->Release();
lpDD = NULL;
}
}
void Draw::CreateSur()
{
HRESULT hr;
LPDIRECTDRAWCLIPPER dcClipper =NULL;
if (DirectDrawCreate(NULL&lpDDNULL)!=DD_OK)
{
//AfxMessageBox(“创建ddraw失败!“);
}
if (lpDD->SetCooperativeLevel(hWndDDSCL_NORMAL)!=DD_OK)
{
//MessageBox(“协作层设置失败!“);
}
//创建离屏表面
ZeroMemory(&ddsdsizeof(ddsd));
ddsd.dwSize = sizeof(ddsd) ;
ddsd.ddsCaps.dwCaps = DDSCAPS_OFFSCREENPLAIN ;
ddsd.dwFlags = DDSD_CAPS | DDSD_HEIGHT | DDSD_WIDTH | DDSD_PIXELFORMAT ;
ddsd.dwWidth = dwidth;
ddsd.dwHeight=dheight;
ddsd.ddpfPixelFormat.dwFlags = DDPF_FOURCC | DDPF_YUV ;
ddsd.ddpfPixelFormat.dwFourCC = MAKEFOURCC(‘Y‘ ‘V‘ ‘1‘ ‘2‘) ;
ddsd.ddpfPixelFormat.dwYUVBitCount = 8 ;
hr = lpDD->CreateSurface(&ddsd &lpDDSBack NULL) ;
if(hr != DD_OK)
{
lpDD->Release() ;
}
//创建主表面
ZeroMemory(&ddsdsizeof(ddsd));
ddsd.dwSize=sizeof(ddsd);
ddsd.dwFlags=DDSD_CAPS;
ddsd.ddsCaps.dwCaps=DDSCAPS_PRIMARYSURFACE;
ddsd.dwBackBufferCount=1;
if (lpDD->CreateSurface(&ddsd&lpDDSPrimaryNULL)!=DD_OK)
{
lpDDSBack->Release();
//MessageBox(“创建住表面失败!“);
}
//创建裁剪区
hr=lpDD->CreateClipper(0&dcClipperNULL);
if (FAILED(hr))
{
lpDD->Release();
lpDDSBack->Release();
lpDDSBack->Release();
return;
}
dcClipper->SetHWnd(0hWnd);
lpDDSPrimary->SetClipper(dcClipper);
//锁定离屏页面
}
void Draw::show(unsigned char * buffer)
{
lpDDSBack->Lock(NULL&ddsdDDLOCK_WAIT|DDLOCK_WRITEONLY|DDLOCK_NOSYSLOCKNULL);
LPBYTE lpSurf = (LPBYTE)ddsd.lpSurface;
LPBYTE PtrY = buffer ;
LPBYTE PtrU = buffer+dwidth*dheight;
LPBYTE PtrV = buffer+(int)(dwidth*dheight*1.25) ;
for (int i=0; i {
memcpy(lpSurf PtrY dwidth );
PtrY +=dwidth ;
lpSurf += ddsd.lPitch;
}
for ( int i=0;i {
memcpy(lpSurf PtrV dwidth/2);
PtrV += dwidth/2;
lpSurf += ddsd.lPitch/2;
}
for (int i=0;i {
memcpy(lpSurf PtrU dwidth/2);
PtrU +=dwidth/2;
lpSurf += ddsd.lPitch/2;
}
lpDDSBack->Unlock(NULL);
CRect rc;
GetWindowRect(hWnd&rc);
lpDDSPrimary->Blt(rclpDDSBackNULLDDBLT_WAITNULL);
}
void Draw::set(int widthint height)
{
dwidth=width;
dheight=height;
}
void Draw::makeWindow()
{
if(IsWindow(hWnd))
{
::DestroyWindow(hWnd);
hWnd = NULL;
}
hWnd = CreateWindow(_T(“name“)_T(“YUV播放“)WS_OVERLAPPEDWINDOW
100100dwidth*2+16dheight*2+36NULLNULLAfxGetInstanceHandle()NULL);
::ShowWindow(hWndSW_NORMAL);
::UpdateWindow(hWnd);
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 4540 2004-09-06 20:58 YUVTORGB\YUVTORGB\ddraw.lib
文件 5660 2010-05-06 19:05 YUVTORGB\YUVTORGB\Debug\BuildLog.htm
文件 13948 2010-05-06 19:04 YUVTORGB\YUVTORGB\Debug\Draw.obj
文件 60 2010-05-06 19:05 YUVTORGB\YUVTORGB\Debug\mt.dep
文件 53629 2010-05-06 19:04 YUVTORGB\YUVTORGB\Debug\NewEdit.obj
文件 467069 2010-05-06 19:04 YUVTORGB\YUVTORGB\Debug\stdafx.obj
文件 682 2010-05-06 19:04 YUVTORGB\YUVTORGB\Debug\YUVTORGB.exe.em
文件 748 2010-05-06 19:04 YUVTORGB\YUVTORGB\Debug\YUVTORGB.exe.em
文件 640 2010-05-06 19:05 YUVTORGB\YUVTORGB\Debug\YUVTORGB.exe.intermediate.manifest
文件 22039 2010-05-06 19:04 YUVTORGB\YUVTORGB\Debug\YUVTORGB.obj
文件 23952 2010-05-02 15:19 YUVTORGB\YUVTORGB\Debug\YUVTORGB.res
文件 139440 2010-05-06 19:05 YUVTORGB\YUVTORGB\Debug\YUVTORGBDlg.obj
文件 3023 2010-05-06 18:56 YUVTORGB\YUVTORGB\Draw.cpp
文件 405 2010-05-06 18:13 YUVTORGB\YUVTORGB\Draw.h
文件 972 2010-05-02 19:01 YUVTORGB\YUVTORGB\NewEdit.cpp
文件 263 2010-05-02 13:12 YUVTORGB\YUVTORGB\NewEdit.h
文件 2909 2010-05-02 01:56 YUVTORGB\YUVTORGB\ReadMe.txt
文件 10836 2010-05-06 19:09 YUVTORGB\YUVTORGB\Release\BuildLog.htm
文件 33626 2010-05-06 19:09 YUVTORGB\YUVTORGB\Release\Draw.obj
文件 60 2010-05-06 19:09 YUVTORGB\YUVTORGB\Release\mt.dep
文件 45605 2010-05-06 19:09 YUVTORGB\YUVTORGB\Release\NewEdit.obj
文件 502784 2010-05-06 19:09 YUVTORGB\YUVTORGB\Release\vc90.idb
文件 640 2010-05-06 19:09 YUVTORGB\YUVTORGB\Release\YUVTORGB.exe.intermediate.manifest
文件 35546 2010-05-06 19:09 YUVTORGB\YUVTORGB\Release\YUVTORGB.obj
文件 33812 2010-05-06 19:09 YUVTORGB\YUVTORGB\Release\YUVTORGB.res
文件 98059 2010-05-06 19:09 YUVTORGB\YUVTORGB\Release\YUVTORGBDlg.obj
文件 21630 2003-07-24 09:52 YUVTORGB\YUVTORGB\res\YUVTORGB.ico
文件 364 2010-05-02 01:57 YUVTORGB\YUVTORGB\res\YUVTORGB.rc2
文件 1232 2010-05-02 14:43 YUVTORGB\YUVTORGB\resource.h
文件 139 2010-05-02 01:57 YUVTORGB\YUVTORGB\stdafx.cpp
............此处省略20个文件信息
相关资源
- 基于mfc的多线程文件传输
- MFC数字钟(基于VC6.0)
- VC++MFC小游戏实例教程(实例)+MFC类库
- ChartCtrl控件库(可在VS2019中使用)
- 商品库存管理系统 C++ MFC
- mfc 调用redis
- MFC视频播放器源码(支持avi/wma/mp3等格
- mfc绘图大全(画直线、矩形、椭圆)
- MFC控件重绘
- hook,捕获所有案件,查找所有窗口,
- (学习)VS2010之MFC入门到精通教程
- MFC文档_视图_框架_模板结构体系深入
- 简单员工管理系统(适合初学MFC)
- MFC五子棋游戏
- MFC UDP编程
- MFC的异步网络通讯应用程序
- C++MFC模块讲解,黑发程序员课程整理
- 一个简单而强大的基于MFC的web server源
- 基于MFC的VC++仿QQ浏览器源码(雏形)
- MFCaccess.rar
- VC++MFC课程设计的学生成绩管理系统
- MFC 日历控件 万年历 Calendar自绘
- CrystalDiskInfo-HDD/SSD硬盘信息,SMART信息
- MFC自定义界面HUI,高效简单,含详细
- 仿射密码-Affine cipher
- c++MFC车牌自动识别定位,只能定位和
- mfc+sql 酒店客房管理系统
- 基于图割的图像分割OpenCV+MFC实现
- MFC绘制Bezier曲线B样条曲线曲线拟合
- MFC坦克大战
评论
共有 条评论