易语言视频捕捉
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
.版本 2
.程序集 窗口程序集1
.子程序 __启动窗口_创建完毕
.局部变量 lpszName, 文本型
.局部变量 lpszVer, 文本型
.局部变量 Caps, CAPDRIVERCAPS
.局部变量 bar, 整数型, , "0"
' // 创建状态条
hStatusbar = CreateWindowEx (0, “msctls_statusbar32”, “”, 位或 (#WS_VISIBLE, #WS_CHILDWINDOW, #SBARS_SIZEGRIP, #SBARS_TOOLTIPS, #CCS_TOP, #CCS_BOTTOM, #CCS_NOMOVEY), 左边, 顶边 - 50, 宽度, 50, 取窗口句柄 (), 0, GetModuleHandle (0), 0)
bar = { 500, -1 }
SendMessageB (hStatusbar, #SB_SETPARTS, 2, bar) ' 设置状态条分隔
SendMessageS (hStatusbar, #SB_SETTEXTA, 0, “状态:”) ' 置初始文本
' // 建立捕捉窗口
lpszName = 取空白文本 (100) ' 分配内存空间
lpszVer = 取空白文本 (100) ' 分配内存空间
capGetDriverDescriptionA (0, lpszName, 100, lpszVer, 100) ' // 取回驱动信息
lwndC = capCreateCaptureWindowA (lpszName, 位或 (#WS_CAPTION, #WS_THICKFRAME, #WS_VISIBLE, #WS_CHILD), 0, 0, 320, 240, 取窗口句柄 (), 0)
' // 设置窗口标题
SetWindowText (lwndC, lpszName)
' // 设置视频流回调函数
capSetCallback*****tatus (lwndC, 到整数 (&MyStatusCallback))
capSetCallbackOnError (lwndC, 到整数 (&MyErrorCallback))
' // 连接捕获窗口的驱动
.如果真 (capDriverConnect (lwndC, 0))
' // 只有做好以下如果连接是成功的。
' // 如果失败的话,报告错误,返回调用函数。
' // 进行捕获驱动程序
capDriverGetCaps (lwndC, VarPtr_CAPDRIVERCAPS (Caps, Caps), GetSize_CAPDRIVERCAPS (Caps))
' // 如果捕获驱动程序不支持的一个选项,将在菜单栏置灰色。
.如果真 (Caps.fHasDlgVideoSource = 0)
mnuSource.可视 = 假
.如果真结束
.如果真 (Caps.fHasDlgVideoFormat = 0)
mnuFormat.可视 = 假
.如果真结束
.如果真 (Caps.fHasDlgVideoDisplay = 0)
mnuDisplay.可视 = 假
.如果真结束
' // 设置预览时的比例
capPreviewScale (lwndC, 真)
' // 设置预览率在毫秒
capPreviewRate (lwndC, 66)
' // 开始预览图像从摄像头
capPreview (lwndC, 真)
' // 调整捕获窗口,以显示整个图象
ResizeCaptureWindow (lwndC)
.如果真结束
.子程序 __启动窗口_将被销毁
.局部变量 vbNull, 文本型
' // 禁用所有的回调
capSetCallbackOnError (lwndC, 0)
capSetCallback*****tatus (lwndC, 0)
capSetCallbackOnYield (lwndC, 0)
capSetCallbackOnFrame (lwndC, 0)
capSetCallbackOnVideoStream (lwndC, 0)
capSetCallbackOnWaveStream (lwndC, 0)
capSetCallbackOnCapControl (lwndC, 0)
.子程序 _mnuAllocate_被选择
.局部变量 sFile, 文本型
.局部变量 lSize, 整数型
' // 安装的交换文件,为捕捉
lSize = 1000000
sFile = “C:\TEMP.AVI”
capFileSetCaptureFile (lwndC, sFile)
capFileAlloc (lwndC, lSize)
.子程序 _mnuAlwaysVisible_被选
择
mnuAlwaysVisible.选中 = 取反 (mnuAlwaysVisible.选中)
.如果 (mnuAlwaysVisible.选中)
SetWindowPos (取窗口句柄 (), #HWND_TOPMOST, 0, 0, 0, 0, 位或 (#SWP_NOSIZE, #SWP_NOMOVE))
.否则
SetWindowPos (取窗口句柄 (), #HWND_NOTOPMOST, 0, 0, 0, 0, 位或 (#SWP_NOSIZE, #SWP_NOMOVE))
.如果结束
.子程序 _mnuCompression_被选择
' // 菜单栏选定“压缩”,显示压缩对话框。
capDlgVideoCompression (lwndC)
.子程序 _mnuCopy_被选择
capEditCopy (lwndC)
.子程序 _mnuDisplay_被选择
' // 菜单栏选定“显示” 显示视频显示对话框。
capDlgVideoDisplay (lwndC)
.子程序 _mnuExit_被选择
销毁 ()
.子程序 _mnuFormat_被选择
' // 菜单栏选定“格式” 显示视频格式对话框。
capDlgVideoFormat (lwndC)
ResizeCaptureWindow (lwndC)
.子程序 _mnuPreview_被选择
SendMessageS (hStatusbar, #SB_SETTEXTA, 0, “”)
mnuPreview.选中 = 取反 (mnuPreview.选中)
capPreview (lwndC, mnuPreview.选中)
.子程序 _mnuScale_被选择
mnuScale.选中 = 取反 (mnuScale.选中)
capPreviewScale (lwndC, mnuScale.选中)
.如果 (mnuScale.选中)
SetWindowLong (lwndC, #GWL_STYLE, 位或 (#WS_THICKFRAME, #WS_CAPTION, #WS_VISIBLE, #WS_CHILD))
.否则
SetWindowLong (lwndC, #GWL_STYLE, 位或 (#WS_BORDER, #WS_CAPTION, #WS_VISIBLE, #WS_CHILD))
.如果结束
ResizeCaptureWindow (lwndC)
.子程序 _mnuSelect_被选择
载入 (视频源窗口, _启动窗口, 真)
.子程序 _mnuSource_被选择
' // 菜单栏选定“来源” 显示来源对话框。
capDlgVideoSource (lwndC)
.子程序 _mnuStart_被选择
.局部变量 sFileName, 文本型
.局部变量 CAP_PARAMS, CAPTUREPARMS
' * 如果开始是选定从菜单中,开始视频流捕获。
' * 压制完成才能终止视频流捕捉。
capCaptureGetSetup (lwndC, VarPtr_CAPTUREPARMS (CAP_PARAMS, CAP_PARAMS), GetSize_CAPTUREPARMS (CAP_PARAMS))
CAP_PARAMS.dwRequestMicroSecPerFrame = 1 × 求次方 (10, 6) ÷ 30 ' 以每秒30帧
CAP_PARAMS.fMakeUserHitOKToCapture = 1
CAP_PARAMS.fCaptureAudio = 0
capCaptureSetSetup (lwndC, VarPtr_CAPTUREPARMS (CAP_PARAMS, CAP_PARAMS), GetSize_CAPTUREPARMS (CAP_PARAMS))
sFileName = “C:\myvideo.avi”
capCaptureSequence (lwndC) ' 开始捕捉!
capFileSaveAs (lwndC, sFileName) ' 复制视频文件从临时交换文件成为一个真正的文件。
.子程序 __启动窗口_尺寸被改变
SendMessage (hStatusbar, #WM_SIZE, #SIZE_RESTORED, 0)