VB.NET通过调用摄像头或数码相机拍照并保存照片

yyj135 2008-02-27 09:46:08
开发环境:VS 2005(WINForm)
要实现的功能:
在窗体上添加一个PictureBox控件或其他控件,在此控件上能够看到通过摄像头或数据相机动态拍摄的视频,当按一下窗体上另外一个Button控件后,保存图片到指定路径。
最好是不要用第三方控件,直接用API或系统自身的方法。谢谢!
...全文
1897 24 打赏 收藏 转发到动态 举报
写回复
用AI写文章
24 条回复
切换为时间正序
请发表友善的回复…
发表回复
treeqisda 2012-08-03
  • 打赏
  • 举报
回复
楼主太好,正好有这方面的需求,VB.NET code可以发到我的邮箱吗?396515010@qq.com
另外,我还有一个C++的关于USB的通讯的实例,哪位大侠可以帮我debug一下,转成VB.NET的code!必当重谢!
Chibi_chan 2011-11-23
  • 打赏
  • 举报
回复
正要做这个,不知道vb.net的有没有用呀?
jiangzhong610 2011-10-25
  • 打赏
  • 举报
回复
先做个标记
akenny0423 2011-10-07
  • 打赏
  • 举报
回复
vb.net写的很好呀,我要调试一下,看看如何。独学则无友,孤陋而寡闻。高手呀
jxcrm 2011-09-08
  • 打赏
  • 举报
回复
正需要,看看
hacker803 2011-05-11
  • 打赏
  • 举报
回复
mark 学习一下!
yongpeng789 2011-01-26
  • 打赏
  • 举报
回复
本人菜鸟。如有完整例子发我邮箱谢谢了 631591277@qq.com
lwliang 2008-05-11
  • 打赏
  • 举报
回复
请问上面vb.net code 如何使用
lwliang 2008-05-11
  • 打赏
  • 举报
回复
我是菜鸟,请fairy4高手指点,最好能有一个完整例子,或请发到我邮箱:liwei_liang@163.com
谢谢
moonless 2008-03-03
  • 打赏
  • 举报
回复
标记一下,有时间再看
macenjie 2008-02-29
  • 打赏
  • 举报
回复
Imports System
Imports System.Runtime.InteropServices
Imports System.Drawing
Imports System.Drawing.Imaging

Public Class Cam

Private Const WM_USER As Integer = &H400
Private Const WS_CHILD As Integer = &H40000000
Private Const WS_VISIBLE As Integer = &H10000000
Private Const WM_CAP_START As Integer = WM_USER
Private Const WM_CAP_STOP As Integer = WM_CAP_START + 68
Private Const WM_CAP_DRIVER_CONNECT As Integer = WM_CAP_START + 10
Private Const WM_CAP_DRIVER_DISCONNECT As Integer = WM_CAP_START + 11
Private Const WM_CAP_SAVEDIB As Integer = WM_CAP_START + 25
Private Const WM_CAP_GRAB_FRAME As Integer = WM_CAP_START + 60
Private Const WM_CAP_SEQUENCE As Integer = WM_CAP_START + 62
Private Const WM_CAP_FILE_SET_CAPTURE_FILEA As Integer = WM_CAP_START + 20
Private Const WM_CAP_SEQUENCE_NOFILE As Integer = WM_CAP_START + 63
Private Const WM_CAP_SET_OVERLAY As Integer = WM_CAP_START + 51
Private Const WM_CAP_SET_PREVIEW As Integer = WM_CAP_START + 50
Private Const WM_CAP_SET_CALLBACK_VIDEOSTREAM As Integer = WM_CAP_START + 6
Private Const WM_CAP_SET_CALLBACK_ERROR As Integer = WM_CAP_START + 2
Private Const WM_CAP_SET_CALLBACK_STATUSA As Integer = WM_CAP_START + 3
Private Const WM_CAP_SET_CALLBACK_FRAME As Integer = WM_CAP_START + 5
Private Const WM_CAP_SET_SCALE As Integer = WM_CAP_START + 53
Private Const WM_CAP_SET_PREVIEWRATE As Integer = WM_CAP_START + 52

Public Const WM_CAP_GET_CAPSTREAMPTR = WM_CAP_START + 1

Public Const WM_CAP_SET_CALLBACK_STATUS = WM_CAP_START + 3
Public Const WM_CAP_SET_CALLBACK_YIELD = WM_CAP_START + 4
Public Const WM_CAP_SET_CALLBACK_WAVESTREAM = WM_CAP_START + 7
Public Const WM_CAP_GET_USER_DATA = WM_CAP_START + 8
Public Const WM_CAP_SET_USER_DATA = WM_CAP_START + 9

Public Const WM_CAP_DRIVER_GET_NAME = WM_CAP_START + 12
Public Const WM_CAP_DRIVER_GET_VERSION = WM_CAP_START + 13
Public Const WM_CAP_DRIVER_GET_CAPS = WM_CAP_START + 14

Public Const WM_CAP_FILE_SET_CAPTURE_FILE = WM_CAP_START + 20
Public Const WM_CAP_FILE_GET_CAPTURE_FILE = WM_CAP_START + 21
Public Const WM_CAP_FILE_ALLOCATE = WM_CAP_START + 22
Public Const WM_CAP_FILE_SAVEAS = WM_CAP_START + 23
Public Const WM_CAP_FILE_SET_INFOCHUNK = WM_CAP_START + 24
Public Const WM_CAP_FILE_SAVEDIB = WM_CAP_START + 25

Public Const WM_CAP_EDIT_COPY = WM_CAP_START + 30

Public Const WM_CAP_SET_AUDIOFORMAT = WM_CAP_START + 35
Public Const WM_CAP_GET_AUDIOFORMAT = WM_CAP_START + 36

Public Const WM_CAP_DLG_VIDEOFORMAT = WM_CAP_START + 41
Public Const WM_CAP_DLG_VIDEOSOURCE = WM_CAP_START + 42
Public Const WM_CAP_DLG_VIDEODISPLAY = WM_CAP_START + 43
Public Const WM_CAP_GET_VIDEOFORMAT = WM_CAP_START + 44
Public Const WM_CAP_SET_VIDEOFORMAT = WM_CAP_START + 45
Public Const WM_CAP_DLG_VIDEOCOMPRESSION = WM_CAP_START + 46

Public Const WM_CAP_GET_STATUS = WM_CAP_START + 54
Public Const WM_CAP_SET_SCROLL = WM_CAP_START + 55

Public Const WM_CAP_GRAB_FRAME_NOSTOP = WM_CAP_START + 61

Public Const WM_CAP_SET_SEQUENCE_SETUP = WM_CAP_START + 64
Public Const WM_CAP_GET_SEQUENCE_SETUP = WM_CAP_START + 65
Public Const WM_CAP_SET_MCI_DEVICE = WM_CAP_START + 66
Public Const WM_CAP_GET_MCI_DEVICE = WM_CAP_START + 67
Public Const WM_CAP_ABORT = WM_CAP_START + 69

Public Const WM_CAP_SINGLE_FRAME_OPEN = WM_CAP_START + 70
Public Const WM_CAP_SINGLE_FRAME_CLOSE = WM_CAP_START + 71
Public Const WM_CAP_SINGLE_FRAME = WM_CAP_START + 72

Public Const WM_CAP_PAL_OPEN = WM_CAP_START + 80
Public Const WM_CAP_PAL_SAVE = WM_CAP_START + 81
Public Const WM_CAP_PAL_PASTE = WM_CAP_START + 82
Public Const WM_CAP_PAL_AUTOCREATE = WM_CAP_START + 83
Public Const WM_CAP_PAL_MANUALCREATE = WM_CAP_START + 84

'// Following added post VFW 1.1
Public Const WM_CAP_SET_CALLBACK_CAPCONTROL = WM_CAP_START + 85

'// Defines end of the message range
Public Const WM_CAP_END = WM_CAP_SET_CALLBACK_CAPCONTROL

Private hWndC As IntPtr
Private bStat As Boolean = False

Private mControlPtr As IntPtr
Private mWidth As Integer
Private mHeight As Integer
Private mLeft As Integer
Private mTop As Integer

<DllImport("avicap32.dll")> _
Private Shared Function capCreateCaptureWindowA(ByVal lpszWindowName() As Byte, ByVal dwStyle As Integer, ByVal x As Integer, ByVal y As Integer, ByVal nWidth As Integer, ByVal nHeight As Integer, ByVal hWndParent As IntPtr, ByVal nID As Integer) As IntPtr
End Function

<DllImport("avicap32.dll")> _
Private Shared Function capGetVideoFormat(ByVal hWnd As IntPtr, ByVal psVideoFormat As IntPtr, ByVal wSize As Integer) As Integer
End Function

<DllImport("User32.dll")> _
Private Shared Function SendMessage(ByVal hWnd As IntPtr, ByVal wMsg As Integer, ByVal wParam As Integer, ByVal lParam As Long) As Boolean
End Function

Function capDlgVideoFormat() As Boolean
capDlgVideoFormat = SendMessage(hWndC, WM_CAP_DLG_VIDEOFORMAT, 0, 0)
End Function

Function capDlgVideoSource() As Boolean
capDlgVideoSource = SendMessage(hWndC, WM_CAP_DLG_VIDEOSOURCE, 0, 0)
End Function

Function capDlgVideoDisplay() As Boolean
capDlgVideoDisplay = SendMessage(hWndC, WM_CAP_DLG_VIDEODISPLAY, 0, 0)
End Function

Function capDlgVideoCompression() As Boolean
capDlgVideoCompression = SendMessage(hWndC, WM_CAP_DLG_VIDEOCOMPRESSION, 0, 0)
End Function
Qim 2008-02-28
  • 打赏
  • 举报
回复
前几天刚写了一个.
网上搜搜源码很多.
楼主想要,邮箱短消息给我.
fairy4 2008-02-28
  • 打赏
  • 举报
回复
上面的重複了,這個才是


'/// <summary>
'/// 初始化摄像头
'/// </summary>
'/// <param name="handle">控件的句柄</param>
'/// <param name="left">开始显示的左边距</param>
'/// <param name="top">开始显示的上边距</param>
'/// <param name="width">要显示的宽度</param>
'/// <param name="height">要显示的长度</param>
Public Sub New(ByVal handle As IntPtr, ByVal left As Integer, ByVal top As Integer, ByVal width As Integer, ByVal height As Integer)
mControlPtr = handle
mWidth = width
mHeight = height
mLeft = left
mTop = top
End Sub

'/// <summary>
'/// 开始显示图像
'/// </summary>
Public Sub Start()
If bStat Then
Return
End If
bStat = True
Dim lpszName(99) As Byte

hWndC = capCreateCaptureWindowA(lpszName, WS_CHILD Or WS_VISIBLE, mLeft, mTop, mWidth, mHeight, mControlPtr, 0)

If hWndC.ToInt32() <> 0 Then
SendMessage(hWndC, WM_CAP_SET_CALLBACK_VIDEOSTREAM, 0, 0)
SendMessage(hWndC, WM_CAP_SET_CALLBACK_ERROR, 0, 0)
SendMessage(hWndC, WM_CAP_SET_CALLBACK_STATUSA, 0, 0)
SendMessage(hWndC, WM_CAP_DRIVER_CONNECT, 0, 0)
SendMessage(hWndC, WM_CAP_SET_SCALE, 1, 0)
SendMessage(hWndC, WM_CAP_SET_PREVIEWRATE, 66, 0)
SendMessage(hWndC, WM_CAP_SET_OVERLAY, 1, 0)
SendMessage(hWndC, WM_CAP_SET_PREVIEW, 1, 0)
End If

Return
End Sub

'/// <summary>
'/// 停止显示
'/// </summary>
Public Sub [Stop]()
SendMessage(hWndC, WM_CAP_DRIVER_DISCONNECT, 0, 0)
bStat = False
End Sub

'/// <summary>
'/// 抓图
'/// </summary>
'/// <param name="path">要保存bmp文件的路径</param>
Public Sub GrabImage(ByVal path As String)
Dim hBmp As IntPtr = Marshal.StringToHGlobalAnsi(path)
SendMessage(hWndC, WM_CAP_SAVEDIB, 0, hBmp.ToInt64())
End Sub

'/// <summary>
'/// 录像
'/// </summary>
'/// <param name="path">要保存avi文件的路径</param>
Public Sub Kinescope(ByVal path As String)
Dim hBmp As IntPtr = Marshal.StringToHGlobalAnsi(path)
SendMessage(hWndC, WM_CAP_FILE_SET_CAPTURE_FILEA, 0, hBmp.ToInt64())
SendMessage(hWndC, WM_CAP_SEQUENCE, 0, 0)
End Sub

'/// <summary>
'/// 停止录像
'/// </summary>
Public Sub StopKinescope()
SendMessage(hWndC, WM_CAP_STOP, 0, 0)
End Sub
End Class
fairy4 2008-02-28
  • 打赏
  • 举报
回复
接上面

[code=VB.NET]Imports System
Imports System.Runtime.InteropServices
Imports System.Drawing
Imports System.Drawing.Imaging

Public Class Cam

Private Const WM_USER As Integer = &H400
Private Const WS_CHILD As Integer = &H40000000
Private Const WS_VISIBLE As Integer = &H10000000
Private Const WM_CAP_START As Integer = WM_USER
Private Const WM_CAP_STOP As Integer = WM_CAP_START + 68
Private Const WM_CAP_DRIVER_CONNECT As Integer = WM_CAP_START + 10
Private Const WM_CAP_DRIVER_DISCONNECT As Integer = WM_CAP_START + 11
Private Const WM_CAP_SAVEDIB As Integer = WM_CAP_START + 25
Private Const WM_CAP_GRAB_FRAME As Integer = WM_CAP_START + 60
Private Const WM_CAP_SEQUENCE As Integer = WM_CAP_START + 62
Private Const WM_CAP_FILE_SET_CAPTURE_FILEA As Integer = WM_CAP_START + 20
Private Const WM_CAP_SEQUENCE_NOFILE As Integer = WM_CAP_START + 63
Private Const WM_CAP_SET_OVERLAY As Integer = WM_CAP_START + 51
Private Const WM_CAP_SET_PREVIEW As Integer = WM_CAP_START + 50
Private Const WM_CAP_SET_CALLBACK_VIDEOSTREAM As Integer = WM_CAP_START + 6
Private Const WM_CAP_SET_CALLBACK_ERROR As Integer = WM_CAP_START + 2
Private Const WM_CAP_SET_CALLBACK_STATUSA As Integer = WM_CAP_START + 3
Private Const WM_CAP_SET_CALLBACK_FRAME As Integer = WM_CAP_START + 5
Private Const WM_CAP_SET_SCALE As Integer = WM_CAP_START + 53
Private Const WM_CAP_SET_PREVIEWRATE As Integer = WM_CAP_START + 52

Public Const WM_CAP_GET_CAPSTREAMPTR = WM_CAP_START + 1

Public Const WM_CAP_SET_CALLBACK_STATUS = WM_CAP_START + 3
Public Const WM_CAP_SET_CALLBACK_YIELD = WM_CAP_START + 4
Public Const WM_CAP_SET_CALLBACK_WAVESTREAM = WM_CAP_START + 7
Public Const WM_CAP_GET_USER_DATA = WM_CAP_START + 8
Public Const WM_CAP_SET_USER_DATA = WM_CAP_START + 9

Public Const WM_CAP_DRIVER_GET_NAME = WM_CAP_START + 12
Public Const WM_CAP_DRIVER_GET_VERSION = WM_CAP_START + 13
Public Const WM_CAP_DRIVER_GET_CAPS = WM_CAP_START + 14

Public Const WM_CAP_FILE_SET_CAPTURE_FILE = WM_CAP_START + 20
Public Const WM_CAP_FILE_GET_CAPTURE_FILE = WM_CAP_START + 21
Public Const WM_CAP_FILE_ALLOCATE = WM_CAP_START + 22
Public Const WM_CAP_FILE_SAVEAS = WM_CAP_START + 23
Public Const WM_CAP_FILE_SET_INFOCHUNK = WM_CAP_START + 24
Public Const WM_CAP_FILE_SAVEDIB = WM_CAP_START + 25

Public Const WM_CAP_EDIT_COPY = WM_CAP_START + 30

Public Const WM_CAP_SET_AUDIOFORMAT = WM_CAP_START + 35
Public Const WM_CAP_GET_AUDIOFORMAT = WM_CAP_START + 36

Public Const WM_CAP_DLG_VIDEOFORMAT = WM_CAP_START + 41
Public Const WM_CAP_DLG_VIDEOSOURCE = WM_CAP_START + 42
Public Const WM_CAP_DLG_VIDEODISPLAY = WM_CAP_START + 43
Public Const WM_CAP_GET_VIDEOFORMAT = WM_CAP_START + 44
Public Const WM_CAP_SET_VIDEOFORMAT = WM_CAP_START + 45
Public Const WM_CAP_DLG_VIDEOCOMPRESSION = WM_CAP_START + 46

Public Const WM_CAP_GET_STATUS = WM_CAP_START + 54
Public Const WM_CAP_SET_SCROLL = WM_CAP_START + 55

Public Const WM_CAP_GRAB_FRAME_NOSTOP = WM_CAP_START + 61

Public Const WM_CAP_SET_SEQUENCE_SETUP = WM_CAP_START + 64
Public Const WM_CAP_GET_SEQUENCE_SETUP = WM_CAP_START + 65
Public Const WM_CAP_SET_MCI_DEVICE = WM_CAP_START + 66
Public Const WM_CAP_GET_MCI_DEVICE = WM_CAP_START + 67
Public Const WM_CAP_ABORT = WM_CAP_START + 69

Public Const WM_CAP_SINGLE_FRAME_OPEN = WM_CAP_START + 70
Public Const WM_CAP_SINGLE_FRAME_CLOSE = WM_CAP_START + 71
Public Const WM_CAP_SINGLE_FRAME = WM_CAP_START + 72

Public Const WM_CAP_PAL_OPEN = WM_CAP_START + 80
Public Const WM_CAP_PAL_SAVE = WM_CAP_START + 81
Public Const WM_CAP_PAL_PASTE = WM_CAP_START + 82
Public Const WM_CAP_PAL_AUTOCREATE = WM_CAP_START + 83
Public Const WM_CAP_PAL_MANUALCREATE = WM_CAP_START + 84

'// Following added post VFW 1.1
Public Const WM_CAP_SET_CALLBACK_CAPCONTROL = WM_CAP_START + 85

'// Defines end of the message range
Public Const WM_CAP_END = WM_CAP_SET_CALLBACK_CAPCONTROL

Private hWndC As IntPtr
Private bStat As Boolean = False

Private mControlPtr As IntPtr
Private mWidth As Integer
Private mHeight As Integer
Private mLeft As Integer
Private mTop As Integer

<DllImport("avicap32.dll")> _
Private Shared Function capCreateCaptureWindowA(ByVal lpszWindowName() As Byte, ByVal dwStyle As Integer, ByVal x As Integer, ByVal y As Integer, ByVal nWidth As Integer, ByVal nHeight As Integer, ByVal hWndParent As IntPtr, ByVal nID As Integer) As IntPtr
End Function

<DllImport("avicap32.dll")> _
Private Shared Function capGetVideoFormat(ByVal hWnd As IntPtr, ByVal psVideoFormat As IntPtr, ByVal wSize As Integer) As Integer
End Function

<DllImport("User32.dll")> _
Private Shared Function SendMessage(ByVal hWnd As IntPtr, ByVal wMsg As Integer, ByVal wParam As Integer, ByVal lParam As Long) As Boolean
End Function

Function capDlgVideoFormat() As Boolean
capDlgVideoFormat = SendMessage(hWndC, WM_CAP_DLG_VIDEOFORMAT, 0, 0)
End Function

Function capDlgVideoSource() As Boolean
capDlgVideoSource = SendMessage(hWndC, WM_CAP_DLG_VIDEOSOURCE, 0, 0)
End Function

Function capDlgVideoDisplay() As Boolean
capDlgVideoDisplay = SendMessage(hWndC, WM_CAP_DLG_VIDEODISPLAY, 0, 0)
End Function

Function capDlgVideoCompression() As Boolean
capDlgVideoCompression = SendMessage(hWndC, WM_CAP_DLG_VIDEOCOMPRESSION, 0, 0)
End Function



[/code]
fairy4 2008-02-28
  • 打赏
  • 举报
回复
Imports System
Imports System.Runtime.InteropServices
Imports System.Drawing
Imports System.Drawing.Imaging

Public Class Cam

Private Const WM_USER As Integer = &H400
Private Const WS_CHILD As Integer = &H40000000
Private Const WS_VISIBLE As Integer = &H10000000
Private Const WM_CAP_START As Integer = WM_USER
Private Const WM_CAP_STOP As Integer = WM_CAP_START + 68
Private Const WM_CAP_DRIVER_CONNECT As Integer = WM_CAP_START + 10
Private Const WM_CAP_DRIVER_DISCONNECT As Integer = WM_CAP_START + 11
Private Const WM_CAP_SAVEDIB As Integer = WM_CAP_START + 25
Private Const WM_CAP_GRAB_FRAME As Integer = WM_CAP_START + 60
Private Const WM_CAP_SEQUENCE As Integer = WM_CAP_START + 62
Private Const WM_CAP_FILE_SET_CAPTURE_FILEA As Integer = WM_CAP_START + 20
Private Const WM_CAP_SEQUENCE_NOFILE As Integer = WM_CAP_START + 63
Private Const WM_CAP_SET_OVERLAY As Integer = WM_CAP_START + 51
Private Const WM_CAP_SET_PREVIEW As Integer = WM_CAP_START + 50
Private Const WM_CAP_SET_CALLBACK_VIDEOSTREAM As Integer = WM_CAP_START + 6
Private Const WM_CAP_SET_CALLBACK_ERROR As Integer = WM_CAP_START + 2
Private Const WM_CAP_SET_CALLBACK_STATUSA As Integer = WM_CAP_START + 3
Private Const WM_CAP_SET_CALLBACK_FRAME As Integer = WM_CAP_START + 5
Private Const WM_CAP_SET_SCALE As Integer = WM_CAP_START + 53
Private Const WM_CAP_SET_PREVIEWRATE As Integer = WM_CAP_START + 52

Public Const WM_CAP_GET_CAPSTREAMPTR = WM_CAP_START + 1

Public Const WM_CAP_SET_CALLBACK_STATUS = WM_CAP_START + 3
Public Const WM_CAP_SET_CALLBACK_YIELD = WM_CAP_START + 4
Public Const WM_CAP_SET_CALLBACK_WAVESTREAM = WM_CAP_START + 7
Public Const WM_CAP_GET_USER_DATA = WM_CAP_START + 8
Public Const WM_CAP_SET_USER_DATA = WM_CAP_START + 9

Public Const WM_CAP_DRIVER_GET_NAME = WM_CAP_START + 12
Public Const WM_CAP_DRIVER_GET_VERSION = WM_CAP_START + 13
Public Const WM_CAP_DRIVER_GET_CAPS = WM_CAP_START + 14

Public Const WM_CAP_FILE_SET_CAPTURE_FILE = WM_CAP_START + 20
Public Const WM_CAP_FILE_GET_CAPTURE_FILE = WM_CAP_START + 21
Public Const WM_CAP_FILE_ALLOCATE = WM_CAP_START + 22
Public Const WM_CAP_FILE_SAVEAS = WM_CAP_START + 23
Public Const WM_CAP_FILE_SET_INFOCHUNK = WM_CAP_START + 24
Public Const WM_CAP_FILE_SAVEDIB = WM_CAP_START + 25

Public Const WM_CAP_EDIT_COPY = WM_CAP_START + 30

Public Const WM_CAP_SET_AUDIOFORMAT = WM_CAP_START + 35
Public Const WM_CAP_GET_AUDIOFORMAT = WM_CAP_START + 36

Public Const WM_CAP_DLG_VIDEOFORMAT = WM_CAP_START + 41
Public Const WM_CAP_DLG_VIDEOSOURCE = WM_CAP_START + 42
Public Const WM_CAP_DLG_VIDEODISPLAY = WM_CAP_START + 43
Public Const WM_CAP_GET_VIDEOFORMAT = WM_CAP_START + 44
Public Const WM_CAP_SET_VIDEOFORMAT = WM_CAP_START + 45
Public Const WM_CAP_DLG_VIDEOCOMPRESSION = WM_CAP_START + 46

Public Const WM_CAP_GET_STATUS = WM_CAP_START + 54
Public Const WM_CAP_SET_SCROLL = WM_CAP_START + 55

Public Const WM_CAP_GRAB_FRAME_NOSTOP = WM_CAP_START + 61

Public Const WM_CAP_SET_SEQUENCE_SETUP = WM_CAP_START + 64
Public Const WM_CAP_GET_SEQUENCE_SETUP = WM_CAP_START + 65
Public Const WM_CAP_SET_MCI_DEVICE = WM_CAP_START + 66
Public Const WM_CAP_GET_MCI_DEVICE = WM_CAP_START + 67
Public Const WM_CAP_ABORT = WM_CAP_START + 69

Public Const WM_CAP_SINGLE_FRAME_OPEN = WM_CAP_START + 70
Public Const WM_CAP_SINGLE_FRAME_CLOSE = WM_CAP_START + 71
Public Const WM_CAP_SINGLE_FRAME = WM_CAP_START + 72

Public Const WM_CAP_PAL_OPEN = WM_CAP_START + 80
Public Const WM_CAP_PAL_SAVE = WM_CAP_START + 81
Public Const WM_CAP_PAL_PASTE = WM_CAP_START + 82
Public Const WM_CAP_PAL_AUTOCREATE = WM_CAP_START + 83
Public Const WM_CAP_PAL_MANUALCREATE = WM_CAP_START + 84

'// Following added post VFW 1.1
Public Const WM_CAP_SET_CALLBACK_CAPCONTROL = WM_CAP_START + 85

'// Defines end of the message range
Public Const WM_CAP_END = WM_CAP_SET_CALLBACK_CAPCONTROL

Private hWndC As IntPtr
Private bStat As Boolean = False

Private mControlPtr As IntPtr
Private mWidth As Integer
Private mHeight As Integer
Private mLeft As Integer
Private mTop As Integer

<DllImport("avicap32.dll")> _
Private Shared Function capCreateCaptureWindowA(ByVal lpszWindowName() As Byte, ByVal dwStyle As Integer, ByVal x As Integer, ByVal y As Integer, ByVal nWidth As Integer, ByVal nHeight As Integer, ByVal hWndParent As IntPtr, ByVal nID As Integer) As IntPtr
End Function

<DllImport("avicap32.dll")> _
Private Shared Function capGetVideoFormat(ByVal hWnd As IntPtr, ByVal psVideoFormat As IntPtr, ByVal wSize As Integer) As Integer
End Function

<DllImport("User32.dll")> _
Private Shared Function SendMessage(ByVal hWnd As IntPtr, ByVal wMsg As Integer, ByVal wParam As Integer, ByVal lParam As Long) As Boolean
End Function

Function capDlgVideoFormat() As Boolean
capDlgVideoFormat = SendMessage(hWndC, WM_CAP_DLG_VIDEOFORMAT, 0, 0)
End Function

Function capDlgVideoSource() As Boolean
capDlgVideoSource = SendMessage(hWndC, WM_CAP_DLG_VIDEOSOURCE, 0, 0)
End Function

Function capDlgVideoDisplay() As Boolean
capDlgVideoDisplay = SendMessage(hWndC, WM_CAP_DLG_VIDEODISPLAY, 0, 0)
End Function

Function capDlgVideoCompression() As Boolean
capDlgVideoCompression = SendMessage(hWndC, WM_CAP_DLG_VIDEOCOMPRESSION, 0, 0)
End Function


lhzyn 2008-02-28
  • 打赏
  • 举报
回复
调用方法
private Pick p = null;
//开始
private void BTStart_Click(object sender, EventArgs e)
{
try
{
p = new Pick(PBVedio.Handle, 0, 0, PBVedio.Width, PBVedio.Height);
p.Start();
}
catch(Exception ex)
{
MessageBox.Show(ex.Message);
}
}

//捕获图像
private void BTCaptrue_Click(object sender, EventArgs e)
{
try
{

//TFileName文件路径
p.GrabImage(TFileName);
p.Stop();

PBPicture.Image = Image.FromFile(TFileName);


//DrawRect();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
//停止
private void BTStop_Click(object sender, EventArgs e)
{
try
{
p.Stop();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
lhzyn 2008-02-28
  • 打赏
  • 举报
回复
c#的
public class Pick
{
private const int WM_USER = 0x400;
private const int WS_CHILD = 0x40000000;
private const int WS_VISIBLE = 0x10000000;
private const int WM_CAP_START = WM_USER;
private const int WM_CAP_STOP = WM_CAP_START + 68;
private const int WM_CAP_DRIVER_CONNECT = WM_CAP_START + 10;
private const int WM_CAP_DRIVER_DISCONNECT = WM_CAP_START + 11;
private const int WM_CAP_SAVEDIB = WM_CAP_START + 25;
private const int WM_CAP_GRAB_FRAME = WM_CAP_START + 60;
private const int WM_CAP_SEQUENCE = WM_CAP_START + 62;
private const int WM_CAP_FILE_SET_CAPTURE_FILEA = WM_CAP_START + 20;
private const int WM_CAP_SEQUENCE_NOFILE = WM_CAP_START + 63;
private const int WM_CAP_SET_OVERLAY = WM_CAP_START + 51;
private const int WM_CAP_SET_PREVIEW = WM_CAP_START + 50;
private const int WM_CAP_SET_CALLBACK_VIDEOSTREAM = WM_CAP_START + 6;
private const int WM_CAP_SET_CALLBACK_ERROR = WM_CAP_START + 2;
private const int WM_CAP_SET_CALLBACK_STATUSA = WM_CAP_START + 3;
private const int WM_CAP_SET_CALLBACK_FRAME = WM_CAP_START + 5;
private const int WM_CAP_SET_SCALE = WM_CAP_START + 53;
private const int WM_CAP_SET_PREVIEWRATE = WM_CAP_START + 52;
private IntPtr hWndC;
private bool bStat = false;

private IntPtr mControlPtr;
private int mWidth;
private int mHeight;
private int mLeft;
private int mTop;

/// <summary>
/// 初始化摄像头
/// </summary>
/// <param name="handle">控件的句柄</param>
/// <param name="left">开始显示的左边距</param>
/// <param name="top">开始显示的上边距</param>
/// <param name="width">要显示的宽度</param>
/// <param name="height">要显示的长度</param>
public Pick(IntPtr handle, int left, int top, int width, int height)
{
mControlPtr = handle;
mWidth = width;
mHeight = height;
mLeft = left;
mTop = top;
}

[DllImport("avicap32.dll")]
private static extern IntPtr capCreateCaptureWindowA(byte[] lpszWindowName, int dwStyle, int x, int y, int nWidth, int nHeight, IntPtr hWndParent, int nID);

[DllImport("avicap32.dll")]
private static extern int capGetVideoFormat(IntPtr hWnd, IntPtr psVideoFormat, int wSize);
[DllImport("User32.dll")]
private static extern bool SendMessage(IntPtr hWnd, int wMsg, int wParam, long lParam);

/// <summary>
/// 开始显示图像
/// </summary>
public void Start()
{
if (bStat)
return;

bStat = true;
byte[] lpszName = new byte[100];

hWndC = capCreateCaptureWindowA(lpszName, WS_CHILD | WS_VISIBLE, mLeft, mTop, mWidth, mHeight, mControlPtr, 0);

if (hWndC.ToInt32() != 0)
{
SendMessage(hWndC, WM_CAP_SET_CALLBACK_VIDEOSTREAM, 0, 0);
SendMessage(hWndC, WM_CAP_SET_CALLBACK_ERROR, 0, 0);
SendMessage(hWndC, WM_CAP_SET_CALLBACK_STATUSA, 0, 0);
SendMessage(hWndC, WM_CAP_DRIVER_CONNECT, 0, 0);
SendMessage(hWndC, WM_CAP_SET_SCALE, 1, 0);
SendMessage(hWndC, WM_CAP_SET_PREVIEWRATE, 66, 0);
SendMessage(hWndC, WM_CAP_SET_OVERLAY, 1, 0);
SendMessage(hWndC, WM_CAP_SET_PREVIEW, 1, 0);
}

return;

}

/// <summary>
/// 停止显示
/// </summary>
public void Stop()
{
SendMessage(hWndC, WM_CAP_DRIVER_DISCONNECT, 0, 0);
bStat = false;
}

/// <summary>
/// 抓图
/// </summary>
/// <param name="path">要保存bmp文件的路径</param>
public void GrabImage(string path)
{

IntPtr hBmp = Marshal.StringToHGlobalAnsi(path);
SendMessage(hWndC, WM_CAP_SAVEDIB, 0, hBmp.ToInt64());

}

/// <summary>
/// 录像
/// </summary>
/// <param name="path">要保存avi文件的路径</param>
public void Kinescope(string path)
{
IntPtr hBmp = Marshal.StringToHGlobalAnsi(path);
SendMessage(hWndC, WM_CAP_FILE_SET_CAPTURE_FILEA, 0, hBmp.ToInt64());
SendMessage(hWndC, WM_CAP_SEQUENCE, 0, 0);
}

/// <summary>
/// 停止录像
/// </summary>
public void StopKinescope()
{
SendMessage(hWndC, WM_CAP_STOP, 0, 0);
}

}
endisoft 2008-02-28
  • 打赏
  • 举报
回复
我也想知道
hzybc 2008-02-28
  • 打赏
  • 举报
回复
me.picturebox1.image.save(“c:\a.ipg”)
herol 2008-02-27
  • 打赏
  • 举报
回复
只做过在原有摄像头软件基础上修改,抓图很容易
没有软件,自己写接收摄像头数据不知道怎么搞,学习下
加载更多回复(4)

16,554

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧