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

时间:2011-07-19 15:52:25

标签: 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_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

我的代码可能太长了,但我刚刚通过教程学习了一些vb6,因为我需要为我的Grad项目制作一个GUI。最后感谢您的帮助

1 个答案:

答案 0 :(得分:0)

WM_CAP_FILE_SAVEDIB消息发送到hwndc,并使用要保存的文件名保存到。

更好的选择是使用WM_CAP_SET_CALLBACK_FRAME消息或capVideoStreamCallback回调函数自行处理视频回调。

另外,请查看http://www.shrinkwrapvb.com/videocap.htm上的示例。

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