不要不劳而获哦,呵呵,
我把框架给你,代码自己去写。这里我们用VFW,暂不讨论用DirectShow的。
1.首先,用到的数据结构:
bitmapinfo(TBitMapInfo in windows.pas):这个不用我说吧
CompVars(TCompVars in VFW.pas)
2.接下来,用到的函数:
function ICOpen(fccType:cardinal;fccHandler:cardinal;wMode:cardinal):Cardinal;--VFW.PAS
打开压缩或者解压缩编码器
function ICSeqCompressFrameStart(pc: PCOMPVARS;
lpbiIn: PBITMAPINFO): BOOL;--VFW.PAS
开始编码
function ICSeqCompressFrame(pc
COMPVARS;uiFlags:UINT;lpBits
VOID;pfKey
BOOL;plSize
DWORD)
VOID;--VFW.PAS
压缩一贞数据
function ICCompressGetFormat(hic:HIC;lpbiInput, lpbiOutput
BITMAPINFOHEADER)
WORD;--VFW.PAS
取得压缩后的图像格式
procedure ICSeqCompressFrameEnd(pc
COMPVARS);--VFW.PAS
结束压缩
function ICClose(hic:HIC)
WORD;--VFW.PAS
关闭编码解码器
3.初始化
首先要建立一个输入图像的bitmapinfo,需要设置这几个参数:bisize,biwidth,biheight,biplanes,bibitcount,bicompression,bisizeimage,其它的置零。
建立压缩参数(Compvars),设置如下参数:
cbsize:结构大小
dwFlages:ICMF_COMPVARS_VALID
fccType:ICTYPE_VIDEO
fccHandler:压缩的fcc编码,如"H263"、"M263",取决于你安装了哪些编码器,以及需要压缩什么格式的视频
lKey:多少贞有一个key贞
lDataRate:期望的数据码率,kbyte per sec.
lQ:质量,0到10000
lpbiIn:输入图像的bitmapinfo的指针
hic:通过ICOPEN函数的到的编码器句柄
lpbiOut:ICCompressGetFormat函数返回的bitmapinfo的指针
4.好了,现在可以开始了
先调用ICSeqCompressFrameStart,参数我们已经准备好了
连续调用ICSeqCompressFrame,把你捕获到的数据直接传进去(是直接的位图数据,不是位图结构信息哦)
保存或网络发送,就随便你了,保存成AVI文件的代码都臭遍街了,不用我罗嗦了吧?实在不知道就查一下MSDN,有现成的Demo,学习一下嘛,提高提高。
完成了需要清场:
ICSeqCompressFrameEnd
ICClose