VC++读取AVi视频文件
头文件 #include <Vfw.h>
成员变量:
// for avi;
PGETFRAME Frame;
BITMAPFILEHEADER BMPFileHeader;
PAVIFILE aviFile;
PAVISTREAM aviStream;
AVISTREAMINFO aviStreamInfo;
int m_nFrameNumber;
BITMAPINFO* m_pBitMapInfo;
BYTE* pData;
int cy;
int cx;
HANDLE handle;
//
读取代码:
AVIFileInit();AVIFileOpen(&aviFile, "E:\\Alizee.avi", OF_READ, NULL);AVIFileGetStream(aviFile, &aviStream, streamtypeVIDEO, 0);AVIStreamInfo(aviStream, &aviStreamInfo, sizeof(aviStreamInfo));AVIFILEINFO fileInfo;AVIFileInfo(aviFile, &fileInfo, sizeof(AVIFILEINFO));cx = fileInfo.dwWidth;cy = fileInfo.dwHeight;AVIFileGetStream(aviFile, &aviStream, streamtypeVIDEO, 0);m_pBitMapInfo = new BITMAPINFO;m_pBitMapInfo->bmiHeader.biBitCount = 32;m_pBitMapInfo->bmiHeader.biClrImportant=0; m_pBitMapInfo->bmiHeader.biClrUsed=0; m_pBitMapInfo->bmiHeader.biCompression=0; m_pBitMapInfo->bmiHeader.biHeight=cy; m_pBitMapInfo->bmiHeader.biWidth=cx; m_pBitMapInfo->bmiHeader.biPlanes=1; m_pBitMapInfo->bmiHeader.biSize=sizeof(BITMAPINFOHEADER);//m_pBitMapInfo->bmiHeader.biSizeImage = (cx * 24 + 31) / 32 * 4 * cy; //图像数据的大小;m_pBitMapInfo->bmiHeader.biSizeImage = 0;m_pBitMapInfo->bmiHeader.biXPelsPerMeter=0;m_pBitMapInfo->bmiHeader.biYPelsPerMeter=0; handle=GlobalAlloc(GHND,((long)((cx*24+31)/32*4)*cy)); pData=(BYTE*)GlobalLock(handle);BMPFileHeader.bfType = 0x4D42;BMPFileHeader.bfSize = (cx * 24 + 31) / 32 * 4 * cy + sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER); //图像的总大小;BMPFileHeader.bfReserved1=0;BMPFileHeader.bfReserved2=0;BMPFileHeader.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER); //24位真彩色位图恒为54;// static CEngine* pEngine = ((CHKEditorApp*)AfxGetApp())->m_pEngine;assert(pEngine != NULL);m_nFrameNumber = 0;SetTimer(ID_AVI_TIMER, 1, 0);
定时器里面:
case ID_AVI_TIMER:{if (m_nFrameNumber == aviStreamInfo.dwLength){KillTimer(ID_AVI_TIMER);return;}PGETFRAME pg = AVIStreamGetFrameOpen(aviStream, &(m_pBitMapInfo-> bmiHeader)); pData = (BYTE*)AVIStreamGetFrame(pg, m_nFrameNumber++); // CClientDC dc(this); // CRect rect; // GetClientRect(&rect); // StretchDIBits(HDC(dc),0,0,rect.right,rect.bottom,0,0,cx,cy,pData,(BITMAPINFO*)m_pBitMapInfo,DIB_RGB_COLORS,SRCCOPY); Engine->m_pixelBuffer->lock(Ogre::HardwareBuffer::HBL_DISCARD);memcpy(Engine->m_pixelBuffer->getCurrentLock().data, &BMPFileHeader, sizeof(BITMAPFILEHEADER));memcpy((BYTE*)Engine->m_pixelBuffer->getCurrentLock().data + sizeof(BITMAPFILEHEADER), m_pBitMapInfo,sizeof(BITMAPINFO));memcpy((BYTE*)Engine->m_pixelBuffer->getCurrentLock().data + sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFO), pData, cx*cy*3);//memcpy((BYTE*)Engine->m_pixelBuffer->getCurrentLock().data, pData, cx * cy * 3/* + sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFO)*/); Engine->m_pixelBuffer->unlock();if (m_nFrameNumber == 5){CFile myfile;myfile.Open( "e:\\hkx.bmp",CFile::modeCreate|CFile::modeWrite|CFile::typeBinary);myfile.Write(&BMPFileHeader, sizeof(BITMAPFILEHEADER));myfile.Write(m_pBitMapInfo,sizeof(BITMAPINFO));myfile.Write(pData, cx * cy * 3);myfile.Close();}AVIStreamGetFrameClose(pg);Engine->m_Root->renderOneFrame();}break;
VC++读取AVi视频文件相关推荐
- OpenCV学习:播放avi视频文件
#if 0 //播放avi视频文件(IplImage) #include <opencv2/opencv.hpp> using namespace std; #pragma comment ...
- 录屏程序之屏幕实时录制保存成AVI视频文件
背景 之前自己在视频教程的时候,就从网上找了个破解版的录屏软件来录制视频.虽然是破解版的,但是破解不完全,因为录制的视频播放到十几分钟之后,就开始显示未注册版本的字样在屏幕中,所以很是碍眼啊. 后来, ...
- matlab avi视频文件与mat文件 互相转换
% 读取avi格式视频,并转换成mat格式: % 彩色图像,三通道单独存储: clc; clear all;obj = VideoReader('E:\示例图像\扭曲帧\1.avi\1.mp4'); ...
- 使用matlab来压缩avi视频文件,版本 matlab2014a
使用matlab来压缩avi视频文件,版本:matlab 2014a. 记录一下自己的工作 fileName = 'input.avi'; %输入的视频文件名 %读取视频函数 obj = VideoR ...
- opencv读取avi视频并抽取帧
opencv读取avi视频并抽取帧 #include "stdafx.h" #include <opencv2/opencv.hpp>using namespace s ...
- python播放本地视频_python opencv 读取本地视频文件 修改ffmpeg的方法
Python + opencv 读取视频的三种情况: 情况一:通过摄像头采集视频 情况二:通过本地视频文件获取视频 情况三:通过摄像头录制视频,再读取录制的视频 摄像头采集.本地视频文件的读取.写视频 ...
- C#中读取流媒体视频文件转H.264具体实现方法
现在有越来越多的人在使用C#语言做编程,但我发现好像用C#做音视频流媒体开发的比较少.我们的libEasyScreenLive目前支持Windows,Android平台,通过EasyScreenLiv ...
- avi视频文件太大怎么变小
avi视频格式的优点是图像质量好,但是其缺点是体积过于庞大,而且更加糟糕的是压缩标准不统一.avi视频文件太大怎么变小?对于我这个日常工作都是和视频打交道的,新媒体人来说曾经是一个难题.但现阶段的全民 ...
- java 读取音频/视频 文件时长
java 读取音频/视频 文件时长 支持mp3,mp4,mov,m4a,wav 格式文件 源码 https://github.com/opensourceteams/java-maven-projec ...
最新文章
- linux脚本查看变量类型,Shell变量:Shell变量的定义、删除变量、只读变量、变量类型...
- PADS2007中的层类型(plane type) 简介
- 基于KVM、Xen、OpenVZ等虚拟化技术的WEB在线管理工具
- floating输入 高阻输入_STM32 GPIO八种输入输出模式
- iOS-绘制UIView之drawCGRect
- 从AR光学开始,了解AR眼镜
- 如何开发一个App(Android)
- WIN7下建行捷德U盾支付
- 噪声概念:白噪声(n)、粉红噪声(1/f)
- IOI2017 Day1 Toy Train 题解
- 李彦宏:我不是传奇(网络转载)
- chia官方矿池常见问题
- 软件工程毕业设计课题(26)基于JAVA毕业设计JAVA家政预约系统毕设作品项目
- 面试 java -----Socket编程
- Linux下的常用的打包和解压缩命令
- php去下划线,html怎么去除字体下划线?去除字体下划线方法
- Cppcheck--C/C++代码静态检测工具
- 《复杂系统突现论》读后
- linux中继器设置密码,无线扩展器管理员密码_初始密码是多少?-192路由网
- WordPress安装教程图解