读取AVI文件,将每帧显示到界面
来源:互联网 发布:淘宝店铺音乐推荐 编辑:程序博客网 时间:2024/05/27 20:31
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;
}
HBITMAP OpenIrVideo::BufferToBitmap(LPBYTE pDIB) //返回值为获取BMP的位图
{
HBITMAP hShowBMP;
ASSERT(pDIB!=NULL);
//Creates a full-color (no palette) DIB from a pointer to a
//full-color memory DIB
//get the BitmapInfoHeader
BITMAPINFOHEADER bih;
RtlMoveMemory(&bih.biSize, pDIB, sizeof(BITMAPINFOHEADER));
BYTE* Bits=new BYTE[bih.biSizeImage];
RtlMoveMemory(Bits, pDIB + sizeof(BITMAPINFOHEADER), bih.biSizeImage); //将文件起始的40个字节去掉,否则会出现错位的情况
BITMAPINFO &bmInfo = *(LPBITMAPINFO)pDIB;
CWnd* pWnd = CWnd::FromHandle(m_winPicHandle);;
CDC* pDC = pWnd->GetDC();
hShowBMP = CreateDIBitmap(pDC->m_hDC,&bih,CBM_INIT,Bits,&bmInfo,DIB_RGB_COLORS);
pWnd->ReleaseDC(pDC);
return hShowBMP;
}
- 读取AVI文件,将每帧显示到界面
- 从AVI中读取每帧数据显示到界面
- MFC(5)读取AVI视频数据并且显示到界面窗口上源码
- AVI文件的读取并显示
- AVI文件的读取并显示
- OpenCV读取AVI文件
- OpenCV读取AVI文件
- OpenCV读取AVI文件
- OpenCV读取AVI文件
- OpenCV读取AVI文件
- OpenCV读取AVI文件
- OpenCV读取AVI文件
- OpenCV读取AVI文件
- OpenCV 读取avi文件
- OpenCV读取AVI文件
- OpenCV读取AVI文件
- 有一个文件 test.txt ,读取文件每一行计算每一行的和,最终将结果保存到result.txt文件中
- Matlab打开AVI格式的视频并把每帧图片都读取出来
- [python]回文
- 打rpm包详细介绍
- testlink1.9.2直接导入xls测试用例
- 请教串口编程:如何实现信号驱动事件
- 奥巴马的演讲
- 读取AVI文件,将每帧显示到界面
- Python 与 C/C++ 的交互编程
- Linux基于事件驱动的程序框架
- ScrollView容器组件的用法
- 网络编程
- URLEncoder
- 认识Android手机
- vmware workstation 8 安装 Mac.OS.X.10.6.3.Retail.dmg
- Unable to open sync connection