在VB6中将网络摄像头显示的视频中的图片保存在PictureBox中

在VB6中将网络摄像头显示的视频中的图片保存在PictureBox中,vb6,video-capture,picturebox,Vb6,Video Capture,Picturebox,我使用了来自互联网的代码以某种形式显示我的网络摄像头,但是,我不知道如何捕获图像并通过命令按钮单击将其自动保存到本地磁盘驱动器。有人能尽快帮我吗:)) 这是我的表格代码 Option Explicit Const ws_visible = &H10000000 Const ws_child = &H40000000 Const WM_USER = 1024 Const WM_CAP_EDIT_COPY = WM_USER + 30 Const wm_cap_driver_

我使用了来自互联网的代码以某种形式显示我的网络摄像头,但是,我不知道如何捕获图像并通过命令按钮单击将其自动保存到本地磁盘驱动器。有人能尽快帮我吗:)) 这是我的表格代码

    Option Explicit
Const ws_visible = &H10000000
Const ws_child = &H40000000
Const WM_USER = 1024
Const WM_CAP_EDIT_COPY = WM_USER + 30
Const wm_cap_driver_connect = WM_USER + 10
Const wm_cap_set_preview = WM_USER + 50
Const wm_cap_set_overlay = WM_USER + 51
Const WM_CAP_SET_PREVIEWRATE = WM_USER + 52
Const WM_CAP_SEQUENCE = WM_USER + 62
Const WM_CAP_SINGLE_FRAME_OPEN = WM_USER + 70
Const WM_CAP_SINGLE_FRAME_CLOSE = WM_USER + 71
Const WM_CAP_SINGLE_FRAME = WM_USER + 72
Const DRV_USER = &H4000
Const DVM_DIALOG = DRV_USER + 100
Const PREVIEWRATE = 30
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Declare Function capCreateCaptureWindow Lib "avicap32.dll" Alias "capCreateCaptureWindowA" (ByVal a As String, ByVal b As Long, ByVal c As Integer, ByVal d As Integer, ByVal e As Integer, ByVal f As Integer, ByVal g As Long, ByVal h As Integer) As Long

Dim hwndc As Long
Dim saveflag As Integer
Dim pictureindex As Integer
Dim filter1(-1 To 1, -1 To 1) As Single
Dim filter2(-1 To 1, -1 To 1) As Single
Dim temp As String

Private Sub Command2_Click()
Unload Me
Main.Show
End Sub

Private Sub Form_Load()
On Error GoTo handler:
hwndc = capCreateCaptureWindow("CaptureWindow", ws_child Or ws_visible, 0, 0,     Pichwnd.Width, Pichwnd.Height, Pichwnd.hWnd, 0)
If (hwndc <> 0) Then
    temp = SendMessage(hwndc, wm_cap_driver_connect, 0, 0)
    temp = SendMessage(hwndc, wm_cap_set_preview, 1, 0)
    temp = SendMessage(hwndc, WM_CAP_SET_PREVIEWRATE, PREVIEWRATE, 0)

    temp = SendMessage(Me.hWnd, WM_CAP_EDIT_COPY, 1, 0)
    Picture1.Picture = Clipboard.GetData
Else
    MsgBox "Unable to capture video.", vbCritical
End If
Exit Sub
handler:
End
End Sub
Private Sub Form_Initialize()
If Me.WindowState <> vbMaximized Then
    Me.WindowState = vbMaximized
Else
    Me.WindowState = vbNormal
End If
End Sub
选项显式
常量ws_可见=&H10000000
Const ws_child=&H40000000
常数WM_USER=1024
常数WM\u CAP\u EDIT\u COPY=WM\u USER+30
常数wm\u cap\u driver\u connect=wm\u USER+10
常数wm\u cap\u set\u preview=wm\u USER+50
常数wm\U cap\U set\U overlay=wm\U USER+51
常数WM\u CAP\u SET\u PREVIEWRATE=WM\u USER+52
常量WM_CAP_序列=WM_用户+62
常量WM\U CAP\U单帧\U OPEN=WM\U用户+70
Const WM\u CAP\u SINGLE\u FRAME\u CLOSE=WM\u USER+71
Const WM_CAP_SINGLE_FRAME=WM_USER+72
Const DRV_USER=&H4000
Const DVM_DIALOG=DRV_用户+100
常数PREVIEWRATE=30
私有声明函数SendMessage Lib“user32”别名“SendMessage a”(ByVal hWnd为Long,ByVal wMsg为Long,ByVal wParam为Long,ByVal lParam为Long)为Long
私有声明函数capCreateCaptureWindow Lib“avicap32.dll”别名“capCreateCaptureWindowA”(ByVal a为字符串,ByVal b为长,ByVal c为整数,ByVal d为整数,ByVal e为整数,ByVal f为整数,ByVal g为长,ByVal h为整数)为长
Dim hwndc尽可能长
将saveflag设置为整数
Dim pictureindex为整数
变光滤波器1(-1到1,-1到1)作为单个
变光滤波器2(-1到1,-1到1)作为单个
作为字符串的Dim temp
专用子命令2_Click()
卸下我
主要节目
端接头
专用子表单_加载()
错误转到处理程序时:
hwndc=capCreateCaptureWindow(“CaptureWindow”,ws_子级或ws_可见,0,Pichwnd.Width,Pichwnd.Height,Pichwnd.hWnd,0)
如果(hwndc 0),则
temp=发送消息(hwndc、wm\U cap\U驱动程序\U connect、0、0)
temp=发送消息(hwndc、wm\U cap\U set\U预览,1,0)
temp=发送消息(hwndc、WM\U CAP\U SET\U PREVIEWRATE、PREVIEWRATE、0)
temp=SendMessage(Me.hWnd,WM\u CAP\u EDIT\u COPY,1,0)
Picture1.Picture=Clipboard.GetData
其他的
MsgBox“无法捕获视频”,vbCritical
如果结束
出口接头
处理程序:
终点
端接头
私有子表单_初始化()
如果将Me.WindowState最大化,则
Me.WindowState=vbMaximized
其他的
Me.WindowState=vbNormal
如果结束
端接头
我的代码可能太长了,但我刚刚通过教程学习了一些vb6,因为我需要为我的毕业项目制作一个GUI。最后,感谢您的帮助

将带有要保存到的文件名的消息发送到您的
hwndc

更好的选择是使用message或回调函数自己处理视频回调

另外,请查看中的示例


请注意,VfW捕获非常过时,应该用Directshow取代(但在VB6中很难正确执行)

Directshow不是也被淘汰了吗?我相当肯定这一过程始于维斯塔,但我没有看到任何巨大的努力。对于大多数媒体应用来说,它仍然是核心。“微软计划在未来的Windows版本中完全取代MediaFoundation的DirectShow。如《媒体基金会》文章中所描述的,Windows Vista和Windows 7应用程序使用MediaFoundation而不是DirectShow来处理多个与媒体相关的任务。”