VB 调用摄像头拍照,保存。

摄像头调控

1、首先创建一个标准EXE工程

 

2、在窗体代码中加入如下必需的API及一个拍照的自定义函数

 

Private Declare Function capCreateCaptureWindow Lib "avicap32.dll" _

Alias "capCreateCaptureWindowA" ( _

ByVal lpszWindowName As String, _

ByVal dwStyle As Long, _

ByVal x As Long, _

ByVal y As Long, _

ByVal nWidth As Long, _

ByVal nHeight As Long, _

ByVal hWndParent As Long, _

ByVal nID As Long) As Long

 

Private Const WS_CHILD = &H40000000

Private Const WS_VISIBLE = &H10000000

Private Const WM_USER = &H400

Private Const WM_CAP_START = &H400

Private Const WM_CAP_EDIT_COPY = (WM_CAP_START + 30)

Private Const WM_CAP_DRIVER_CONNECT = (WM_CAP_START + 10)

Private Const WM_CAP_SET_PREVIEWRATE = (WM_CAP_START + 52)

Private Const WM_CAP_SET_OVERLAY = (WM_CAP_START + 51)

Private Const WM_CAP_SET_PREVIEW = (WM_CAP_START + 50)

Private Const WM_CAP_DRIVER_DISCONNECT = (WM_CAP_START + 11)

 

Private Preview_Handle As Long

 

Private Declare Function SendMessage Lib "user32" _

Alias "SendMessageA" ( _

ByVal hwnd As Long, _

ByVal wMsg As Long, _

ByVal wParam As Long, _

lParam As Any) As Long

 

 

Private Function CapturePicture(nCaptureHandle As Long) As StdPicture

Clipboard.Clear

SendMessage nCaptureHandle, WM_CAP_EDIT_COPY, 0, 0

Set CapturePicture = Clipboard.GetData

End Function

 

3、在窗体上加入一个Picturebox和两个button,一个caption为拍照,一个为保存

 

4、给窗体的Load加如下代码

 

Preview_Handle = capCreateCaptureWindow("Video", WS_CHILD + WS_VISIBLE, 2, 2, 220, 156, Me.hwnd, 1)

SendMessage Preview_Handle, WM_CAP_DRIVER_CONNECT, 0, 0

SendMessage Preview_Handle, WM_CAP_SET_PREVIEWRATE, 1, 0

SendMessage Preview_Handle, WM_CAP_SET_PREVIEW, 1, 0

 

5、双击拍照按钮

 

Picture1.Picture = CapturePicture(Preview_Handle)

 

6、双击保存按钮

 

SavePicture Picture1.Picture, "c:\a.bmp"

 

7、在窗体的unload事件中加入如下代码

 

SendMessage Preview_Handle, WM_CAP_DRIVER_DISCONNECT, 0, 0

 

8、运行程序,调试

 

全部程序清单:

 

Private Declare Function capCreateCaptureWindow Lib "avicap32.dll" _

Alias "capCreateCaptureWindowA" ( _

ByVal lpszWindowName As String, _

ByVal dwStyle As Long, _

ByVal x As Long, _

ByVal y As Long, _

ByVal nWidth As Long, _

ByVal nHeight As Long, _

ByVal hWndParent As Long, _

ByVal nID As Long) As Long

 

Private Const WS_CHILD = &H40000000

Private Const WS_VISIBLE = &H10000000

Private Const WM_USER = &H400

Private Const WM_CAP_START = &H400

Private Const WM_CAP_EDIT_COPY = (WM_CAP_START + 30)

Private Const WM_CAP_DRIVER_CONNECT = (WM_CAP_START + 10)

Private Const WM_CAP_SET_PREVIEWRATE = (WM_CAP_START + 52)

Private Const WM_CAP_SET_OVERLAY = (WM_CAP_START + 51)

Private Const WM_CAP_SET_PREVIEW = (WM_CAP_START + 50)

Private Const WM_CAP_DRIVER_DISCONNECT = (WM_CAP_START + 11)

 

Private Preview_Handle As Long

 

Private Declare Function SendMessage Lib "user32" _

Alias "SendMessageA" ( _

ByVal hwnd As Long, _

ByVal wMsg As Long, _

ByVal wParam As Long, _

lParam As Any) As Long

 

Private Function CapturePicture(nCaptureHandle As Long) As StdPicture

Clipboard.Clear

SendMessage nCaptureHandle, WM_CAP_EDIT_COPY, 0, 0

Set CapturePicture = Clipboard.GetData

End Function

 

Private Sub Command1_Click()

SavePicture Picture1.Picture, "c:\a.bmp"

End Sub

 

Private Sub Command2_Click()

Picture1.Picture = CapturePicture(Preview_Handle)

End Sub

 

Private Sub Form_Load()

Preview_Handle = capCreateCaptureWindow("Video", WS_CHILD + WS_VISIBLE, 2, 2, 220, 156, Me.hwnd, 1)

SendMessage Preview_Handle, WM_CAP_DRIVER_CONNECT, 0, 0

SendMessage Preview_Handle, WM_CAP_SET_PREVIEWRATE, 1, 0

SendMessage Preview_Handle, WM_CAP_SET_PREVIEW, 1, 0

End Sub

 

Private Sub Form_Unload(Cancel As Integer)

SendMessage Preview_Handle, WM_CAP_DRIVER_DISCONNECT, 0, 0

End Sub

 

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值