从AVI中读取每帧数据显示到界面
2012-02-20 09:59
330 查看
int OpenIrVideo::SendImageData(THPARAM *param, int sourceDes,CFile& fs) //发送镜像数据
{
g_imageBuffSize=_IR_320_BUFF_SIZE_;
AVIFileInit(); //初始化AVI文件
PAVIFILE avi;
int res=AVIFileOpen(&avi, m_AVIName, OF_READ, NULL); //打开avi文件,m_AVIName是avi路径名
if (res!=AVIERR_OK)
{
//an error occures
if (avi!=NULL)
AVIFileRelease(avi);
}
AVIFILEINFO avi_info;
AVIFileInfo(avi, &avi_info, sizeof(AVIFILEINFO));
PAVISTREAM pStream;
res=AVIFileGetStream(avi, &pStream, streamtypeVIDEO /*video stream*/,
0 /*first stream*/);
if (res!=AVIERR_OK)
{
if (pStream!=NULL)
AVIStreamRelease(pStream);
AVIFileExit();
}
int iNumFrames;
int iFirstFrame;
iFirstFrame=AVIStreamStart(pStream); //获取起始帧
if (iFirstFrame==-1)
{
//Error getteing the frame inside the stream
if (pStream!=NULL)
AVIStreamRelease(pStream);
AVIFileExit();
}
iNumFrames=AVIStreamLength(pStream); //获取帧长度
if (iNumFrames==-1)
{
//Error getteing the number of frames inside the stream
if (pStream!=NULL)
AVIStreamRelease(pStream);
AVIFileExit();
}
PGETFRAME pFrame;
pFrame=AVIStreamGetFrameOpen(pStream,
NULL/*(BITMAPINFOHEADER*) AVIGETFRAMEF_BESTDISPLAYFMT*/ /*&bih*/);
int index=0;
BYTE* pDIB;
for (int i=iFirstFrame; i<iNumFrames; i++)
{
index= i-iFirstFrame;
pDIB = (BYTE*)AVIStreamGetFrame(pFrame, index); //获取每帧的数据流
SynSendData(param,4,pDIB,g_imageBuffSize);
m_Bitmap = BufferToBitmap(pDIB); //将内存中的BMP文件内容转换到HBITMAP
HBITMAP OldBitmap;
CWnd* pWnd = CWnd::FromHandle(m_winPicHandle);;
CDC* pDC = pWnd->GetDC();
CDC MemDC;
MemDC.CreateCompatibleDC(pDC);
OldBitmap = (HBITMAP)MemDC.SelectObject(m_Bitmap);
CRect rect;
pWnd->GetClientRect(&rect);
pDC->BitBlt(0,0,rect.Width(),rect.Height(),&MemDC,0,0,SRCCOPY);
MemDC.SelectObject(OldBitmap);
MemDC.DeleteDC();
pWnd->ReleaseDC(pDC);
Sleep(100);
if(i == iNumFrames-1)
{
i = 0;
}
}
return 1;
}
{
g_imageBuffSize=_IR_320_BUFF_SIZE_;
AVIFileInit(); //初始化AVI文件
PAVIFILE avi;
int res=AVIFileOpen(&avi, m_AVIName, OF_READ, NULL); //打开avi文件,m_AVIName是avi路径名
if (res!=AVIERR_OK)
{
//an error occures
if (avi!=NULL)
AVIFileRelease(avi);
}
AVIFILEINFO avi_info;
AVIFileInfo(avi, &avi_info, sizeof(AVIFILEINFO));
PAVISTREAM pStream;
res=AVIFileGetStream(avi, &pStream, streamtypeVIDEO /*video stream*/,
0 /*first stream*/);
if (res!=AVIERR_OK)
{
if (pStream!=NULL)
AVIStreamRelease(pStream);
AVIFileExit();
}
int iNumFrames;
int iFirstFrame;
iFirstFrame=AVIStreamStart(pStream); //获取起始帧
if (iFirstFrame==-1)
{
//Error getteing the frame inside the stream
if (pStream!=NULL)
AVIStreamRelease(pStream);
AVIFileExit();
}
iNumFrames=AVIStreamLength(pStream); //获取帧长度
if (iNumFrames==-1)
{
//Error getteing the number of frames inside the stream
if (pStream!=NULL)
AVIStreamRelease(pStream);
AVIFileExit();
}
PGETFRAME pFrame;
pFrame=AVIStreamGetFrameOpen(pStream,
NULL/*(BITMAPINFOHEADER*) AVIGETFRAMEF_BESTDISPLAYFMT*/ /*&bih*/);
int index=0;
BYTE* pDIB;
for (int i=iFirstFrame; i<iNumFrames; i++)
{
index= i-iFirstFrame;
pDIB = (BYTE*)AVIStreamGetFrame(pFrame, index); //获取每帧的数据流
SynSendData(param,4,pDIB,g_imageBuffSize);
m_Bitmap = BufferToBitmap(pDIB); //将内存中的BMP文件内容转换到HBITMAP
HBITMAP OldBitmap;
CWnd* pWnd = CWnd::FromHandle(m_winPicHandle);;
CDC* pDC = pWnd->GetDC();
CDC MemDC;
MemDC.CreateCompatibleDC(pDC);
OldBitmap = (HBITMAP)MemDC.SelectObject(m_Bitmap);
CRect rect;
pWnd->GetClientRect(&rect);
pDC->BitBlt(0,0,rect.Width(),rect.Height(),&MemDC,0,0,SRCCOPY);
MemDC.SelectObject(OldBitmap);
MemDC.DeleteDC();
pWnd->ReleaseDC(pDC);
Sleep(100);
if(i == iNumFrames-1)
{
i = 0;
}
}
return 1;
}
相关文章推荐
- MFC(5)读取AVI视频数据并且显示到界面窗口上源码
- MFC(5)读取AVI视频数据并且显示到界面窗口上源码
- Android 使用RxJava+Retrofit +Realm 组合加载数据 <读取缓存 显示 请求网络数据 缓存最新数据 更新界面>(一)
- 读取AVI文件,将每帧显示到界面
- Android 使用RxJava+Retrofit +Realm 组合加载数据 <读取缓存 显示 请求网络数据 缓存最新数据 更新界面>(二)
- win32强化练习2.1_简单加法计算器(界面文本与数据的读取和显示)
- C++ 从数据库读取数据,将数据显示在界面上的TreeCtrl上
- 《项目经验》--后台一般处理程序向前台JS文件传递JSON,JS解析JSON,将数据显示在界面--显示在DropDownList 或 显示在动态创建的table中
- MFC VS2010 读取txt中数据并显示
- flex :读取access数据库数据 转化为xml 然后在flex页面显示绑定图片
- VC6.0中使用Stream Object读取数据中流文件并显示Bmp,JPG等图片
- C# 读取文本内容,在Dev控件中显示数据
- JS读取XML文件数据并以table形式显示数据的方法(兼容IE与火狐)
- OpenCv中批量读取图片数据并显示出来的C++程序
- jqGrid 从服务器读取json数据不显示问题 ; 样式不正常问题
- 网络抓包工具: 提供界面,可抓取网络数据包并显示
- 激光雷达学习笔记(二)数据读取和显示
- 利用COM组件IPicture读取jpg、gif、bmp图片文件数据和显示图片的两个函数
- Qt实现读取显示obj文件——读取数据
- AjaxLoading:利用Ajax加载数据,并显示友好的等待界面