求助:VB调用本地摄像头拍照程序提示错误

belully 2014-07-28 10:45:01
小弟初学VB,从百度上下载的程序,摄像头(罗技Webcamera)可看到已连接,拍照时出现以下错误,
请教各位前辈是何问题,谢谢。


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 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 Preview_Handle As Long


Public Function CreateCaptureWindow( _
hWndParent As Long, _
Optional x As Long = 0, _
Optional y As Long = 0, _
Optional nWidth As Long = 320, _
Optional nHeight As Long = 240, _
Optional nCameraID As Long = 0) As Long

Preview_Handle = capCreateCaptureWindow("Video", _
WS_CHILD + WS_VISIBLE, x, y, _
nWidth, nHeight, hWndParent, 1)

SendMessage Preview_Handle, WM_CAP_DRIVER_CONNECT, nCameraID, 0
SendMessage Preview_Handle, WM_CAP_SET_PREVIEWRATE, 30, 0
SendMessage Preview_Handle, WM_CAP_SET_OVERLAY, 1, 0
SendMessage Preview_Handle, WM_CAP_SET_PREVIEW, 1, 0

CreateCaptureWindow = Preview_Handle
End Function


Public Function CapturePicture(nCaptureHandle As Long) As StdPicture
Clipboard.Clear
SendMessage nCaptureHandle, WM_CAP_EDIT_COPY, 0, 0
Set CapturePicture = Clipboard.GetData
End Function


Public Sub Disconnects(nCaptureHandle As Long, _
Optional nCameraID = 0)

SendMessage nCaptureHandle, WM_CAP_DRIVER_DISCONNECT, _
nCameraID, 0
End Sub


Private Video_Handle As Long

Private Sub Form_Load()
Video_Handle = CreateCaptureWindow(Picture1.hwnd)
End Sub

Private Sub Command1_Click()
Dim x As StdPicture
Set x = CapturePicture(Video_Handle)
SavePicture x, "H:\Test-20140626\a.jpg"
End Sub

Private Sub Form_Unload(Cancel As Integer)
Disconnect Video_Handle
End Sub
...全文
275 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
belully 2014-08-04
  • 打赏
  • 举报
回复
引用 1 楼 caozhy 的回复:
Set CapturePicture = Clipboard.GetData(vbCFBitmap) 看看。 另外ctrl+f5完整编译一次,看第一个报错在哪里,是什么错。
修改后OK。 但是保存的图片大小是640*480,为何不是320*240呢? 请问在哪修改?谢谢。
pipi20091001 2014-08-03
  • 打赏
  • 举报
回复
Public Function CapturePicture(nCaptureHandle As Long) As StdPicture Clipboard.Clear SendMessage nCaptureHandle, WM_CAP_EDIT_COPY, 0, 0 Set CapturePicture = Clipboard.GetData End Function 里面参数是long型,Private Preview_Handle As Long 你看看是否一致?
threenewbee 2014-07-29
  • 打赏
  • 举报
回复
Set CapturePicture = Clipboard.GetData(vbCFBitmap) 看看。 另外ctrl+f5完整编译一次,看第一个报错在哪里,是什么错。
熊孩子开学喽 2014-07-29
  • 打赏
  • 举报
回复
这边有个详细例程: http://www.cnblogs.com/xidongs/archive/2009/07/17/1525598.html

1,451

社区成员

发帖
与我相关
我的任务
社区描述
VB 控件
社区管理员
  • 控件
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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