在VB6下调用普通USB摄像头,如何拍照?

myface2011 2014-06-26 04:26:23
我用VB6,在窗体里加了一个PictureBox或者Image,用来表示摄像头显示所拍摄的区域,现在加了一个按钮,拍照让拍下来的照片显示在这个PictureBox框里,我网上找了找,一旦拍摄启动,感觉是调用资源的问题,请有做过的大牛赐教!
...全文
7812 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
litaoa 2016-06-30
  • 打赏
  • 举报
回复
在获取视频的时候和获取别的窗体的时候用的API是不一样的,以前我测试过用普能API不能截取播放的影片的图,后来没再试过。 用暴风和QQ可以实现。暂没发现是什么原理。
SHPMEX 2016-06-18
  • 打赏
  • 举报
回复
我的错误是 “380”无效属性值
嗷嗷叫的老马 2016-06-18
  • 打赏
  • 举报
回复
对于楼顶文字,我严重怀疑你是会打中文的老外,因为我看了三遍,完全没看明白你在讲什么,虽然字都认识..... 看了3楼补充,终于让我明白了: 原来你是因为这部分代码有错误 好吧,扯远了,中文语法问题我没法帮你,但VB的问题还是能帮到点的: 你的错误是"runtime error "521 " can't open clipboard",已经讲得很明白,无法打开剪贴板. 从CapturePicture()函数的实现来看,需要把截的图放到剪贴板里再取回来,才能得到一个stdPicture对象,以便保存. Public Function CapturePicture(nCaptureHandle As Long) As StdPicture Clipboard.Clear SendMessage nCaptureHandle, WM_CAP_EDIT_COPY, 0, 0 Set CapturePicture = Clipboard.GetData End Function 至于你这代码为什么无法打开剪贴板,你要跟到CapturePicture()内部去,搞清楚具体错误是在哪一行. 如果是Clipboard.Clear,那有可能是别的程序正在使用,可以尝试用一个带Sleep(100)的循环去调用这一句,没有错误的话即成功. 另外,这样的方法不好,因为你并不需要使用到剪贴板,WM_CAP_EDIT_COPY消息是方便在别的地方(例如QQ聊天窗口中)粘贴图像而使用的,你这里是为了保存到文件并显示,那使用WM_CAP_FILE_SAVEDIB消息是最合适不过的了. 这里给你一个封装:
Function capFileSaveDIB(ByVal hCapWnd As Long, ByVal FilePath As String) As Boolean
   capFileSaveDIB = SendMessageAsString(hCapWnd, WM_CAP_FILE_SAVEDIB, 0&, FilePath)
End Function

'调用:
if not capFileSaveDIB(Video_Handle,"C:\a1.bmp") then
    Msgbox "保存失败!"
end if
myface2011 2014-07-30
  • 打赏
  • 举报
回复
我用了网上一段程序,如下:
.bas部分的代码
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 = 440, _
Optional nHeight As Long = 440, _
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 Disconnect(nCaptureHandle As Long, _
Optional nCameraID = 0)

SendMessage nCaptureHandle, WM_CAP_DRIVER_DISCONNECT, _
nCameraID, 0
End Sub

放了一个窗体,一个按钮,一个picturebox控件,窗体部分代码:
Dim Video_Handle As Long

Private Sub Command1_Click()
Dim x As StdPicture
Set x = CapturePicture(Video_Handle)
SavePicture x, "c:\a1.bmp"
PicCapture.Visible = False
nowPic.Visible = True
nowPic.Picture = LoadPicture("c:\a1.bmp")
Image1.Picture = LoadPicture("c:\a1.bmp")
End Sub

Private Sub Form_Load()
Video_Handle = CreateCaptureWindow(PicCapture.hwnd)
nowPic.Visible = False
End Sub

Private Sub Form_Unload(Cancel As Integer)
Disconnect Video_Handle
End Sub

执行到这两句出错:
Set x = CapturePicture(Video_Handle)
SavePicture x, "c:\a1.bmp"
提示的错误是:
runtime error "521 " can't open clipboard
不知道什么原因?
e4snake 2014-07-02
  • 打赏
  • 举报
回复
都不知道你怎么用的。。。。。
myface2011 2014-06-27
  • 打赏
  • 举报
回复
请求大牛们帮助!

809

社区成员

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

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