下载
加入VIP
  • 专属下载特权
  • 现金文档折扣购买
  • VIP免费专区
  • 千万文档免费下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 视频捕捉全教程_vc_vfw

视频捕捉全教程_vc_vfw.doc

视频捕捉全教程_vc_vfw

一瞬间化作永恒
2017-10-24 0人阅读 举报 0 0 暂无简介

简介:本文档为《视频捕捉全教程_vc_vfwdoc》,可适用于工程科技领域

视频捕捉全教程vcvfw目录一视频捕获快速入门二基本的捕获设置,(设置捕获速度:,(设置终止捕获,(捕获的时间限制三关于捕获窗口,创建一个AVICAP捕获窗口,(将一个捕获窗口连接至捕获设备,(父窗口与子窗口的交互,(捕获窗口的状态四视频捕获驱动和音频驱动,(视频捕获驱动的性能:,(视频对话框:,(PREVIEW和OVERLAY模式:,(视频格式,(视频捕获设置,(声频格式五(使用视频捕获创建捕获窗口(CREATINGACAPTUREWINDOW)连接到捕获驱动(CONNECTINGTOACAPTUREDRIVER)列举所有已安装的捕获驱动(ENUMERATINGINSTALLEDCAPTUREDRIVERS)得到捕获驱动的性能(OBTAININGTHECAPABILITIESOFACAPTUREDRIVER)得到捕获窗口的状态(OBTAININGTHESTATUSOFACAPTUREWINDOW)显示对话框设置视频特征(DISPLAYINGDIALOGBOXESTOSETVIDEOCHARACTERISTICS)得到和设置视频格式(OBTAININGANDSETTINGTHEVIDEOFORMAT)预览视频(PREVIEWINGVIDEO)将视频设置为OVERLAY模式(ENABLINGVIDEOOVERLAY)命名捕获文件(NAMINGTHECAPTUREFILE)格式化声频捕获(FORMATTINGAUDIOCAPTURE)改变视频捕获设置(CHANGINGAVIDEOCAPTURESETTING)捕获数据(CAPTURINGDATA)增加一个信息块(ADDINGANINFORMATIONCHUNK)在程序中加入一个回调函数(ADDINGCALLBACKFUNCTIONSTOANAPPLICATION)创建一个状态回调函数(CREATINGASTATUSCALLBACKFUNCTION)创建一个错误回调函数(CREATINGANERRORCALLBACKFUNCTION)创建一个框架回调函数(CREATINGAFRAMECALLBACKFUNCTION)六(将四个标准对话框改成函数调用形式AUDIOFORMAT对话框VIDEOFORMAT对话框VIDEOSOURCE对话框VIDEOCOMPRESSION对话框前言视频捕获是指由专用的视频采集卡捕获声频和视频信息然后将其进行数据化处理再经过软件的压缩进行处理这时就可对这些数据进行保存、回放、传输等各种操作。Windows专门提供了VideoforWindows来对视频处理进行支持提供的接口可以被大多数的视频采集卡支持并有多种视频压缩驱动供选择(当然视频压缩可以自己开发)采集卡支持摄像头,,等多种输入。一视频捕获快速入门视频捕捉将一个视频流和音频流数字化,然后存储在硬盘或其他存储介质上一个AVICap视窗口句柄描述了声频与视频流的细节,这样就使你的应用程序从AVI文件格式,声频视频缓冲管理,低层声频视频驱动访问等等解脱出来,AVICap为应用程序提供了一个灵活的介面,你可以仅仅使用如下几行代码就可以将视频捕捉加入你的程序:hWndC=capCreateCaptureWindow("MyOwnCaptureWindow",WSCHILD|WSVISIBLE,,,,,hwndParent,nID)SendMessage(hWndC,WMCAPDRIVERCONNECT,*wIndex*,L)SendMessage(hWndC,WMCAPSEQUENCE,,L)一个宏其实也是使用SendMessage,只不过提供给程序一个更易读的代码而已,下面的这些示例就是使用宏的方法将视频捕捉加入程序:hWndC=capCreateCaptureWindow("MyOwnCaptureWindow",WSCHILD|WSVISIBLE,,,,,hwndParent,nID)capDriverConnect(hWndC,)capCaptureSequence(hWndC)当你创建了一个AVICap类的捕捉窗口并将它连接到一个视频驱动时,此捕捉窗口即可以开始捕捉数据,你的程序可以简单的发送WMCAPSEQUENCE消息(或者使用capCaptureSequence宏)来开始捕捉如果是缺省的设置,WMCAPSEQUENCE会开始捕捉视频音频流到CAPTUREAVI文件中,直到下面的某一事件发生为止:用户按下了ESC键或者一个鼠标键你的应用程序终止或异常中断捕捉操作磁盘已满在一个应用程序里,你可以发送WMCAPSTOP消息来终止捕捉数据(或者使用capCaptureStop宏),你也可以发送WMCAPABORT消息(或者使用capCaptureAbort宏)来终止二基本的捕获设置基本的捕获设置包括:设置捕获速度(每秒捕获多少帧)是否同时捕获声频捕获缓冲允许最大丢失多少帧是否使用,,,内存以及用键盘的哪个键或鼠标的哪个键来终止捕获等等。这些基本的设置都可以使用,,,,,,,,,,,,,结构来描述你可以使用capCaptureGetSetup宏来得到当前的设置然后改变此结构的成员变量再使用capCaptureSetSetup宏设置新的设置。例如:,(设置捕获速度:捕捉速度是指捕捉任务每秒钟捕获的帧数,你可以发送WMCAPGETSEQUENCESETUP消息(或者使用capCaptureGetSetup宏)来得到当前的捕捉速度,当前的捕捉速度保存在CAPTUREPARAMS结构的dwRequestMicroSecPerFrame成员变量中,你可以通过设置此变量来改变当前设置,单位是每毫秒连续的帧数,你可以发送WMCAPSETSEQUENCESETUP消息(或者使用capCaptureSetSetup宏),dwRequestMicroSecPerFrame的值是,相当于每秒帧,(设置终止捕获你可以允许用户按下某键或某组合键或者鼠标的左右键来终止一个捕获任务,如果是实时的捕获,则捕获的文件将会被丢弃如果是单步捕获,在终止之前所捕获的内容将会被保存你可以通过发送WMCAPGETQUENCESETUP消息(或者使用capCaptureGetSetup宏)来得到当前的设置,当前的按键设置保存在CAPTUREPARAMS的vKeyAbort成员中,当前的鼠标设置保存在fAbortLeftMouse和fAbortRightMouse成员中你可以设置新的按键或按键组合,或者鼠标左右键,当你修改的CAPTUREPARAMS后,应该发送WMCAPSETSEQUENCESETUP消息来进行更新(或者使用capCaptureSetSetup宏)缺省的按键是VKESCAPE你必须在指定按键之前使用RegisterHotKey函数,鼠标缺省的值是fAbortLeftMouse和fAbortRightMouse都为TRUE,(捕获的时间限制CAPTUREPARAMS结构中的fLimitEnabled指示是否有时间限度,wTimeLimit指示最大的持续时间,单位为秒得到fLimitEnabled和wTimeLimit的值可以发送WMCAPGETSEQUENCESETUP消息(或使用capCatureGetSetup宏),当设置了这些成员变量后,应该发送消息WMCAPSETSEQUENCESETUP消息(或capCaptureSetSetup宏)来更新CAPTUREPARAMS结构三关于捕获窗口在捕获之前必须创建一个捕获窗口(capturewindow)在发送消息或使用宏的过程中都需要使用此窗口。,创建一个AVICap捕获窗口你可以使用capCreateCaptureWindow函数来创建一个AVICap捕获窗口,此函数将会返回一个句柄,此句柄以后在发送消息时要用你可以在一个程序里创建一个或多个捕获窗口,然后给每一个窗口连接不同的捕获设置,(将一个捕获窗口连接至捕获设备你可以动态的在一个捕获窗口与一个捕获设备之前连接或断接,你可以发送WMCAPDRIVERCONNECT消息来使一个捕获窗口与一个捕获设备连接或关联当连接上以后,你就可以通过捕获窗口向捕获设备发送各种消息如果你的系统里装有多个捕获设备,你可以在发送WMCAPDRIVERCONNECT消息时用wParam参数指定使用哪一个,此参数是登记在SYSTEMINI文件的drivers一节里的列表中的某一项,为第一个你可以使用capGetDriverDescription函数来得到已安装的捕获设备的名称及版本,这样你的程序就可以列举所有已安装的捕获设备和驱动,这样用户就可以选择其中的一个来与你的捕获窗口连接你可以发送WMCAPDRIVERGETNAME消息(或capDriverGetName宏)来得到连接到捕获窗口的捕获设备的名称,得到版本发送WMCAPDRIVERGETVERSION消息(或capDriverGetVersion宏)你可以发送WMCAPDRIVERDISCONNECT消息(或capDriverDisconnect宏)来断接,(父窗口与子窗口的交互一些象WMPALETTECHANGED和WMQUERYNEWPALETTE的系统级消息只能发送到顶级窗口或OVERLAPPED窗口,如果一个捕获窗口是子窗口,就必须通过父窗口转送同样的,如果父窗口的尺寸改变了,它就需要通知捕获窗口,相反地,如果捕获窗口的尺寸改变了,捕获窗口就需要发送消息给父窗口,一个简单的方法就是始终保持捕获窗口的尺寸与视频流的尺寸一致,并随时将尺寸的改变通知父窗口,(捕获窗口的状态你可以发送WMCAPGETSTATUS消息(或capGetStatus宏)来得到当前捕获窗口的状态,得到的是一个CAPSTATUS结构的拷贝,它包含图片的尺寸,卷轴的当前位置,overlay和preview是否已设置因为CAPSTATUS信息是动态的,你的程序应该只要捕获的视频流的尺寸或格式可能发生了改变就应该进行刷新(例如:显示了捕获设备的视频格式以后)改变捕获窗口的尺寸并不影响实际的捕获的视频流的尺寸,视频捕获设备的格式对话框捕获频流的尺寸四视频捕获驱动和音频驱动,(视频捕获驱动的性能:你可以通过发送WMCAPDRIVERGETCAPS消息(或者capDriverGetCaps宏)来得到当前连接的视频驱动的硬件性能得到的信息保存在CAPDRIVERCAPS结构中,(视频对话框:每一个视频驱动能够提供四个对话框来控制视频捕获和数字化处理,定义压缩品质等,这些对话框都定义在视频捕获驱动中VideoSource对话框用于控制选择视频来源,此对话框列举了此视频捕获卡连接的所有视频源(典型的例如:SVHS和合成输入),并提供了改变色调,对比度,饱和度如果视频驱动支持此对话框,你就可以显示并更新它,使用WMCAPDLGVIDEOSOURCE消息(或capDlgVideoSource宏)VideoFormat对话框定义视频帧的尺寸以及精度,视频捕获卡的压缩设置如果卡支持的话,可以发送消息WMCAPDLGVIDEOFORMAT消息或(capDlgVideoFormat宏)VideoDisplay对话框控制在视频捕获期间在显示器上的显示,此控制不会影响视频数字数据,但是他们可能会影响数字信号的表现形式,例如:如果捕获设备支持overlay,可能允许改变色调和饱和度,关键色彩或者overlay队列如果卡支持,你可以发送WMCAPDLGVIDEODISPLAY消息(或者使用capDlgVideoDisplay宏)VideoCompression对话框控制压缩品质,如果卡支持,发送消息WMCAPDLGVIDEOCOMPRESSION(或capDlgVideoCompression宏),(Preview和Overlay模式:一个视频捕获驱动对进入的视频流有两种工作模式:Preview模式和overlay模式,如果一个捕获驱动能够执行两种方法,用户可以在其中选择一种Preview模式把从捕获硬件传来的数据送入系统内存并使用图形设备介面(GDI)将数字化帧显示在捕获窗口内应用程序可以在父窗口失去焦点时减缓显示速度,当重新又得到焦点后加快显示速度,此种模式要占用大量CPU时间有三种消息控制Preview操作:WMCAPSETPREIVEW消息(capPreview宏)允许或禁止preview模式WMCAPSETPREVIEWRATE(capPreviewRate宏)当帧在preview模式显示时设置速度WMCAPSETSCALE(capPreviewScale宏)允许或禁止preview视频的缩放比例当preview和scaling同时使用,捕获的视频帧将会根据捕获窗口的尺寸自动缩放,允许preview模式会自动关闭overlay模式overlay模式是一个硬件函数它将数据送入捕获缓冲区中因而不占用CPU资源你可以发送消息WMCAPSETOVERLAY(或capOverlay宏)给捕获窗口来启用或终止overlay模式,允许overlay模式会自动禁止preview模式你同时也可以在preview模式或overlay模式里发送WMCAPSETSCROLL消息(或capSetScrollPos宏)来设置视频帧的客户区卷轴位置,(视频格式你可以通过发送WMCAPGETVIDEOFORMAT消息(或capGetVideoFormat和capGetVideoFormatSize宏)来得到视频格式的结构或结构的尺寸你可以通过发送CAPSETVIDEOFORMAT消息(或capSetVideoFormat宏)来设置视频格式,(视频捕获设置CAPTUREPARMS结构包含了对视频捕获流的控制参数,你可以完成以下这些任务:指定帧数指定分配多少视频缓冲允许或禁止声频捕获指定捕获的时间间隔指定在捕获的过程中是否使用MCI设置(VCR或者videodisc)指定终止流的键盘或鼠标specifythetypeofvideoaveragingappliedduringcapture得到:WMCAPGETSEQUENCESETUP消息(或capCaptureGetSetup宏)设置:WMCAPSETSEQUENCESETUP消息(或capCaptureSetSetup宏),(声频格式你可以通过发送WM,CAP,GET,AUDIOFORMAT消息(或capGetAudioFormat宏和capGetAudioFormatSize宏)来得到当前捕获音频数据的格式或尺寸格式。缺省的声频格式是:单声道、位、kHzPCM。当你使用WM,CAP,GET,AUDIOFORMAT时总是使用WAVEFORMATEX结构。设置发送消息WM,CAP,SET,AUDIOFORMAT消息(或capSetAudioFormat宏)可以传送WAVEFORMATWAVEFORMATEXPCMWAVEFORMAT结构指针。五(使用视频捕获创建捕获窗口(CreatingaCaptureWindow)hWndC=capCreateCaptureWindow((LPSTR)"MyCaptureWindow",windownameifpopupWSCHILD|WSVISIBLE,windowstyle,,,,windowpositionanddimensions(HWND)hwndParent,(int)nID*childID*)连接到捕获驱动(ConnectingtoaCaptureDriver)下面的例子是将MSVIDEO驱动连接到句柄为hWndC的捕获窗口,然后调用capDriverDisconnect宏来断接fOK=SendMessage(hWndC,WMCAPDRIVERCONNECT,,L)Or,usethemacrotoconnecttotheMSVIDEOdriver:fOK=capDriverConnect(hWndC,)PlacecodetosetupandcapturevideoherecapDriverDisconnect(hWndC)列举所有已安装的捕获驱动(EnumeratingInstalledCaptureDrivers)下面的例子使用capGetDriverDescription函数得到已安装的捕获驱动的名称及版本:charszDeviceNamecharszDeviceVersionfor(wIndex=wIndex<wIndex){if(capGetDriverDescription(wIndex,szDeviceName,sizeof(szDeviceName),szDeviceVersion,sizeof(szDeviceVersion)){Appendnametolistofinstalledcapturedriversandthenlettheuserselectadrivertouse}}得到捕获驱动的性能(ObtainingtheCapabilitiesofaCaptureDriver)发送WMCAPDRIVERGETCAPS消息可以得到捕获驱动的性能,并保存入一个CAPDRIVERCAPS结构每当程序连接一个新的捕获驱动到一个捕获窗口时,就应该更新CAPDRIVERCAPS结构下面的程序举例说明了如何使用capDriverGetCaps宏来得到捕获驱动的性能:CAPDRIVERCAPSCapDrvCapsSendMessage(hWndC,WMCAPDRIVERGETCAPS,sizeof(CAPDRIVERCAPS),(LONG)(LPVOID)CapDrvCaps)Or,usethemacrotoretrievethedrivercapabilitiescapDriverGetCaps(hWndC,CapDrvCaps,sizeof(CAPDRIVERCAPS))得到捕获窗口的状态(ObtainingtheStatusofaCaptureWindow)下面的例子使用SetWindowPos函数使捕获窗口与进来的视频流尺寸保持一致,视频流的基本信息是使用capGetStatus宏得到的,保存在CAPSTATUS结构中CAPSTATUSCapStatuscapGetStatus(hWndC,CapStatus,sizeof(CAPSTATUS))SetWindowPos(hWndC,,,,CapStatusuiImageWidth,CapStatusuiImageHeight,SWPNOZORDER|SWPNOMOVE)显示对话框设置视频特征(DisplayingDialogBoxestoSetVideoCharacteristics)每个视频捕获卡一般能提供三个不同的对话框用于控制视频捕获及数字化处理下面的例子说明如何显示这些对话框,在显示这些对话框之前,使用了capDriverGetCaps宏来检查CAPDRIVERCAPS结构,以检测该卡是否有显示这些对话框:CAPDRIVERCAPSCapDrvCapscapDriverGetCaps(hWndC,CapDrvCaps,sizeof(CAPDRIVERCAPS))Videosourcedialogboxif(CapDriverCapsfHasDlgVideoSource)capDlgVideoSource(hWndC)Videoformatdialogboxif(CapDriverCapsfHasDlgVideoFormat){capDlgVideoFormat(hWndC)AretherenewimagedimensionscapGetStatus(hWndC,CapStatus,sizeof(CAPSTATUS))Ifso,notifytheparentofasizechange}Videodisplaydialogboxif(CapDriverCapsfHasDlgVideoDisplay)capDlgVideoDisplay(hWndC)得到和设置视频格式(ObtainingandSettingtheVideoFormat)BITMAPINFO结构的长度既适应于标准的也适应于压缩的数据格式,所有程序必须总是询问此结构的尺寸以便在得到当前的视频格式之前分配内存下面的例子就是使用capGetVideoFormatSize宏来得到缓冲区尺寸并调用capGetVideoFormat宏来得到当前的视频格式LPBITMAPINFOlpbiDWORDdwSizedwSize=capGetVideoFormatSize(hWndC)lpbi=GlobalAllocPtr(GHND,dwSize)capGetVideoFormat(hWndC,lpbi,dwSize)Accessthevideoformatandthenfreetheallocatedmemory程序可以使用capSetVideoFormat宏(或WMCAPSETVIDEOFORMAT消息)发送一个BITMAPINFO头结构给捕获窗口,因为视频格式是设备细节,你的程序应该检查返回值以便确定此格式是否已被接受预览视频(PreviewingVideo)下面的例子使用capPreviewRate宏来设置每毫秒显示一帧,并使用capPreview宏将它放置在捕获窗口里capPreviewRate(hWndC,)rate,inmillisecondscapPreview(hWndC,TRUE)startspreviewPreviewcapPreview(hWnd,FALSE)disablespreview将视频设置为overlay模式(EnablingVideoOverlay)下面的例子:capDriverGetCaps宏确定此捕获卡是否有overlay功能,如果有就使用宏来设置它CAPDRIVERCAPSCapDrvCapscapDriverGetCaps(hWndC,CapDrvCaps,sizeof(CAPDRIVERCAPS))if(CapDrvCapsfHasOverlay)capOverlay(hWndC,TRUE)命名捕获文件(NamingtheCaptureFile)下面的例子:使用capFileSetCaptureFile宏来指定预备文件名为:MYCAPAVI,capFileAlloc宏预先指定它的大小为McharszCaptureFile="MYCAPAVI"capFileSetCaptureFile(hWndC,szCaptureFile)capFileAlloc(hWndC,(L*L*))格式化声频捕获(FormattingAudioCapture)下面的例子使用capSetAudioFormat来设置声频格式为:kHz,PCM位,立体声WAVEFORMATEXwfexwfexwFormatTag=WAVEFORMATPCMwfexnChannels=UsestereowfexnSamplesPerSec=wfexnAvgBytesPerSec=wfexnBlockAlign=wfexwBitsPerSample=wfexcbSize=capSetAudioFormat(hWndC,wfex,sizeof(WAVEFORMATEX))改变视频捕获设置(ChangingaVideoCaptureSetting)下面的例子使用capCaptureGetSetup和capCaptureSetSetup宏得将捕获帧数从缺省的帧改成每秒帧CAPTUREPARMSCaptureParmsfloatFramesPerSec=capCaptureGetSetup(hWndC,CaptureParms,sizeof(CAPTUREPARMS))CaptureParmsdwRequestMicroSecPerFrame=(DWORD)(eFramesPerSec)capCaptureSetSetup(hWndC,CaptureParms,sizeof(CAPTUREPARMS))捕获数据(CapturingData)下面的例子使用capCaptureSequence宏来开始捕获视频并使用capFileSaveAs宏来将捕获的数据拷贝至NEWFILEAVI文件中charszNewName="NEWFILEAVI"SetupthecaptureoperationcapCaptureSequence(hWndC)CapturecapFileSaveAs(hWndC,szNewName)增加一个信息块(AddinganInformationChunk)如果你需要在你的程序捕获的声频和视频数据中加入你的其他信息,你可以创建一个信息块并将它们插入捕获文件中,信息块可以包含一些典型的信息,例如:版权信息,视频来源,外部定位信息等下面的例子使用capFileSetInfoChunk宏来插入一个信息块,里面包含了一个SMPTE的时间代码ThisexampleassumestheapplicationcontrolsthevideosourceforprerollandpostrollCAPINFOCHUNKciccicfccInfoID=infotypeSMPTETIMEciclpData=":::"ciccbData=strlen(ciclpData)capFileSetInfoChunk(hwndC,cic)在程序中加入一个回调函数(AddingCallbackFunctionstoanApplication)一个程序可以为捕获窗口登记一个回调函数以便在以下的这些情况下通知程序状态改变错误发生视频框架和声频缓冲区变得可用程序应用在捕获视频流的过程中接收下面的例子创建一个捕获窗口并登记状态,错误,视频流和框架回调函数在消息处理对列中,也包括了一个终止回调函数的说明caseWMCREATE:{charachDeviceNamecharachDeviceVersioncharachBufferWORDwDriverCount=WORDwIndexWORDwErrorHMENUhMenuCreateacapturewindowusingthecapCreateCaptureWindowmacroghWndCap=capCreateCaptureWindow((LPSTR)"CaptureWindow",WSCHILD|WSVISIBLE,,,,,(HWND)hWnd,(int))RegistertheerrorcallbackfunctionusingthecapSetCallbackOnErrormacrocapSetCallbackOnError(ghWndCap,fpErrorCallback)RegisterthestatuscallbackfunctionusingthecapSetCallbackOnStatusmacrocapSetCallbackOnStatus(ghWndCap,fpStatusCallback)RegisterthevideostreamcallbackfunctionusingthecapSetCallbackOnVideoStreammacrocapSetCallbackOnVideoStream(ghWndCap,fpVideoCallback)RegistertheframecallbackfunctionusingthecapSetCallbackOnFramemacrocapSetCallbackOnFrame(ghWndCap,fpFrameCallback)Connecttoacapturedriverbreak}caseWMCLOSE:{UsethecapSetCallbackOnFramemacrotodisabletheframecallbackSimilarcallsexistfortheothercallbackfunctionscapSetCallbackOnFrame(hWndC,)break}创建一个状态回调函数(CreatingaStatusCallbackFunction)下面的例子是创建一个简单的状态回调函数,登记此回调函数使用capSetCallbackOnStatus宏StatusCallbackProc:statuscallbackfunctionhWnd:capturewindowhandlenID:statuscodeforthecurrentstatuslpStatusText:statustextstringforthecurrentstatusLRESULTPASCALStatusCallbackProc(HWNDhWnd,intnID,LPSTRlpStatusText){if(!ghWndMain)returnFALSEif(nID==){ClearoldstatusmessagesSetWindowText(ghWndMain,(LPSTR)gachAppName)return(LRESULT)TRUE}ShowthestatusIDandstatustextwsprintf(gachBuffer,"Status#d:s",nID,lpStatusText)SetWindowText(ghWndMain,(LPSTR)gachBuffer)return(LRESULT)TRUE}创建一个错误回调函数(CreatinganErrorCallbackFunction)下面的例子是创建一个简单的错误回调函数,登记此回调函数使用capsetCallbackOnError宏:ErrorCallbackProc:errorcallbackfunctionhWnd:capturewindowhandlenErrID:errorcodefortheencounterederrorlpErrorText:errortextstringfortheencounterederrorLRESULTPASCALErrorCallbackProc(HWNDhWnd,intnErrID,LPSTRlpErrorText){if(!ghWndMain)returnFALSEif(nErrID==)StartinganewmajorfunctionreturnTRUEClearoutolderrorsShowtheerroridentifierandtextwsprintf(gachBuffer,"Error#d",nErrID)MessageBox(hWnd,lpErrorText,gachBuffer,MBOK|MBICONEXCLAMATION)return(LRESULT)TRUE}创建一个框架回调函数(CreatingaFrameCallbackFunction)登记此回调函数使用capSetCallbackOnFrame宏:FrameCallbackProc:framecallbackfunctionhWnd:capturewindowhandlelpVHdr:pointertostructcontainingcapturedframeinformationLRESULTPASCALFrameCallbackProc(HWNDhWnd,LPVIDEOHDRlpVHdr){if(!ghWndMain)returnFALSEwsprintf(gachBuffer,"Previewframe#ld",gdwFrameNum)SetWindowText(ghWndMain,(LPSTR)gachBuffer)return(LRESULT)TRUE}六(将四个标准对话框改成函数调用形式系统提供了四个标准的对话框:AudioFormat,VideoFormat,VideoSource,VideoCompression但有时程序希望通过函数控制它们而不是使用系统提供的那个单一的对话框此时就应该使用函数调用的方法:AudioFormat对话框可以通过使用capSetAudioFormat来实现此时要使用WAVEFORMATEX结构。例如:改成,,,格式立体声,,声道kHz则:WAVEFORMATEXaudioFormat确定宽度acmMetrics(,ACMMETRICMAXSIZEFORMAT,dwSize)dwSize=max(dwSize,capGetAudioFormatSize(mhwCapCapturing))设置参数audioFormatwFormatTag=WAVEFORMATPCMaudioFormatnChannels=audioFormatnSamplesPerSec=audioFormatwBitsPerSample=audioFormatnBlockAlign=nBitsPerSample*nChannelsaudioFormatnAvgBytesPerSec=audioFormatnBlockAlign*nSamplesPerSec更新capSetAudioFormat(ghCapWnd,audioFormat,dwSize)VideoFormat对话框可以通过使用capSetVideoFormat来实现此时要使用BITMAPINFOHEADER结构。例如:设置图片大小为,,,,,位岁大小为,,,,,,,BITMAPINFOHEADERbiDWORDdwSize,dwbibiSize=sizeof(BITMAPINFOHEADER)bibiWidth=起作用bibiHeight=起作用bibiPlanes=bibiBitCount=bibiCompression=BIRGBbibiSizeImage=bibiXPelsPerMeter=bibiYPelsPerMeter=bibiClrUsed=bibiClrImportant=dwSize=bibiSize((bibiBitCount>||bibiClrUsed)(bibiClrUsed*sizeof(PALETTEENTRY)):(^bibiBitCount*sizeof(PALETTEENTRY)))dw=capSetVideoFormat(mhwCapCapturing,bi,dwSize)VideoSource对话框没有找到现成的方法但视频捕获卡提供的,,里面有一个动态链接库可以实现。VideoCompression对话框可以通过使用ICOpen,ICInfo等函数联合起来得到当前系统里面的视频压缩驱动的列表并可选择其一,,,,里面有一个程序示范了此用户程序名叫:ICWalk。

用户评价(0)

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

文档小程序码

使用微信“扫一扫”扫码寻找文档

1

打开微信

2

扫描小程序码

3

发布寻找信息

4

等待寻找结果

我知道了
评分:

/23

视频捕捉全教程_vc_vfw

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利