直接上代码:

'code by lichmama from cnblogs.com
'@vb6 camera control
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 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 Declare Function DestroyWindow Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, _
ByVal hWndInsertAfter As Long, _
ByVal x As Long, ByVal y As Long, _
ByVal cx As Long, ByVal cy As Long, _
ByVal wFlags As Long) As Long Private Const SWP_SHOWWINDOW = &H40
Private Const HWND_TOP = '摄像头显示窗口控制消息常数
Private Const WS_CHILD = &H40000000
Private Const WS_VISIBLE = &H10000000
Private Const WS_CAPTION = &HC00000
Private Const WS_THICKFRAME = &H40000 '摄像头控制消息参数
Private Const WM_USER = &H400 '用户消息开始号
Private Const WM_CAP_CONNECT = WM_USER + '连接一个摄像头
Private Const WM_CAP_DISCONNECT = WM_USER + '断开一个摄像头的连接
Private Const WM_CAP_SET_PREVIEW = WM_USER + '使预览模式有效或者失效
Private Const WM_CAP_SET_OVERLAY = WM_USER + '使窗口处于叠加模式,也会自动地使预览模式失效。
Private Const WM_CAP_SET_PREVIEWRATE = WM_USER + '设置在预览模式下帧的显示频率
Private Const WM_CAP_GRAB_FRAME = WM_USER + '抓取摄像头当前帧,并存入缓冲区
Private Const WM_CAP_GRAB_FRAME_NOSTOP = WM_USER + '抓取摄像头当前帧,并存入缓冲区(该行为不会暂停摄像头显示)
Private Const WM_CAP_EDIT_COPY = WM_USER + '将当前图像复制到剪贴板
Private Const WM_CAP_GET_STATUS = WM_USER + '获取摄像头状态
Private Const WM_CAP_SEQUENCE = WM_USER + '开始录像,录像未结束前不会返回。
Private Const WM_CAP_STOP = (WM_USER + ) '暂停录像
Private Const WM_CAP_ABORT = (WM_USER + ) '终止录像
Private Const WM_CAP_FILE_SET_CAPTURE_FILE = WM_USER + '设置当前的视频捕捉文件
Private Const WM_CAP_File_GET_CAPTURE_FILE = WM_USER + '得到当前的视频捕捉文件 Private Type POINTAPI
x As Long
y As Long
End Type '摄像头状态结构体
Private Type CAPSTATUS
uiImageWidth As Long '// Width of the image
uiImageHeight As Long '// Height of the image
fLiveWindow As Long '// Now Previewing video?
fOverlayWindow As Long '// Now Overlaying video?
fScale As Long '// Scale image to client?
ptScroll As POINTAPI '// Scroll position
fUsingDefaultPalette As Long '// Using default driver palette?
fAudioHardware As Long '// Audio hardware present?
fCapFileExists As Long '// Does capture file exist?
dwCurrentVideoFrame As Long '// # of video frames cap'td
dwCurrentVideoFramesDropped As Long '// # of video frames dropped
dwCurrentWaveSamples As Long '// # of wave samples cap'td
dwCurrentTimeElapsedMS As Long '// Elapsed capture duration
hPalCurrent As Long '// Current palette in use
fCapturingNow As Long '// Capture in progress?
dwReturn As Long '// Error value after any operation
wNumVideoAllocated As Long '// Actual number of video buffers
wNumAudioAllocated As Long '// Actual number of audio buffers
End Type Private hCapWnd As Long Private Sub Command1_Click()
'创建显示窗口,并连接摄像头
hCapWnd = capCreateCaptureWindow("mycapWnd", WS_VISIBLE Or WS_CHILD, &, &, &, &, Me.hwnd, &)
Call SendMessage(hCapWnd, WM_CAP_CONNECT, &, ByVal &) '重新设置显示窗口的大小
Dim caps As CAPSTATUS
Call SendMessage(hCapWnd, WM_CAP_GET_STATUS, Len(caps), ByVal VarPtr(caps))
Call SetWindowPos(hCapWnd, HWND_TOP, &, &, caps.uiImageWidth, caps.uiImageHeight, SWP_SHOWWINDOW) '设置摄像头显示模式为预览及其帧率(30fps)
Call SendMessage(hCapWnd, WM_CAP_SET_PREVIEW, &, ByVal &)
Call SendMessage(hCapWnd, WM_CAP_SET_PREVIEWRATE, &, ByVal &)
End Sub Private Sub Command2_Click()
'截取摄像头显示帧,并保存到剪切板
Call SendMessage(hCapWnd, WM_CAP_GRAB_FRAME_NOSTOP, &, ByVal &)
Call SendMessage(hCapWnd, WM_CAP_EDIT_COPY, &, ByVal &)
End Sub Private Sub Command3_Click()
'启动录像模式,并设置文件保存路径
'说明:启动录像模式后,摄像头会持续向目标文件写入,直到有终止操作发生。
' 其中终止操作包括:1、用户使用ESC键或鼠标按钮
' 2、当前应用程序退出或退出了捕获操作(WM_CAP_STOP/WM_CAP_ABORT)
' 3、本地磁盘空间不足
' *如果设置采样帧率过高,文件增长会比较快,请注意!
Call SendMessage(hCapWnd, WM_CAP_FILE_SET_CAPTURE_FILE, &, ByVal "c:\1.avi")
Call SendMessage(hCapWnd, WM_CAP_SEQUENCE, &, ByVal &)
End Sub Private Sub Command4_Click()
'终止录像行为
Call SendMessage(hCapWnd, WM_CAP_ABORT, &, ByVal &)
End Sub Private Sub Form_Unload(Cancel As Integer)
'断开摄像头连接,并销毁显示窗口
Call SendMessage(hCapWnd, WM_CAP_DISCONNECT, &, ByVal &)
Call DestroyWindow(hCapWnd)
End Sub

VB6之摄像头控制的更多相关文章

  1. unity中camera摄像头控制详解

    目录 1. 缘起 2. 开发 2.1. 建立项目 2.2. 旋转 2.2.1. 四元数 2.3. 移动 2.3.1. 向量操作 2.4. 镜头拉伸 2.5. 复位 2.6. 优化 1 缘起 我们的产品 ...

  2. OpenCV系列--摄像头控制的简单代码

    操作系统:windows xp 开发工具:VS2008 opencv版本:2.1.0 依赖库:OpenCV2.1\lib\highgui.lib #include "cv.h" # ...

  3. 【转载】OpenCV 摄像头控制

    参考:[OpenCV] -- 简单摄像头操作 - 代码人生 - 博客频道 - CSDN.NET http://blog.csdn.net/qiurisuixiang/article/details/8 ...

  4. C#控制操控操作多个UVC摄像头设备

    有时,我们需要在C#代码中对多个UVC摄像头进行操作,如何实现呢? 建立基于SharpCamera的项目 首先,请根据之前的一篇博文 点击这里 中的说明,建立基于SharpCamera的摄像头控制项目 ...

  5. C# Aforge设置摄像头视频属性和控制属性

    修改后的代码:github 一.调用windows自身摄像头属性设置窗口 使用VideoCaptureDevice对象的DisplayPropertyPage(IntPtr parentWindow) ...

  6. 通过ISAPI http协议控制海康摄像头

    一直用海康的SDK进行摄像头控制,但有时候非常不灵活,必须有X86的主机,在嵌入式上面就不行,通过写一个HTTPCLIENT可以通过ISAPI来控制海康的摄像头. 代码如下:git@github.co ...

  7. 第46章 DCMI—OV5640摄像头—零死角玩转STM32-F429系列

    第46章     DCMI—OV5640摄像头 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com ...

  8. 第45章 DCMI—OV2640摄像头—零死角玩转STM32-F429系列

    第45章     DCMI—OV2640摄像头 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com ...

  9. C#读写修改设置调整UVC摄像头画面-缩放

    有时,我们需要在C#代码中对摄像头的缩放进行读和写,并立即生效.如何实现呢? 建立基于SharpCamera的项目 首先,请根据之前的一篇博文 点击这里 中的说明,建立基于SharpCamera的摄像 ...

随机推荐

  1. Spring Cloud 客服端负载均衡 Ribbon

    一.简介   Spring Cloud Ribbon 是一个基于Http和TCP的客服端负载均衡工具,它是基于Netflix Ribbon实现的.它不像服务注册中心.配置中心.API网关那样独立部署, ...

  2. jquery和vue对比

    1.jquery介绍:想必大家都用过jquery吧,这个曾经也是现在依然最流行的web前端js库,可是现在无论是国内还是国外他的使用率正在渐渐被其他的js库所代替,随着浏览器厂商对HTML5规范统一遵 ...

  3. MyBatis通用Mapper开发

    通常情况下,MyBatis 的增删改查操作需要自己在相应xml中写相关语句, 但是运用相关工具,其实可以很方便的自动生成单表的所有增删改查(通用的多表联合查询还是需要自己写). 也可以根据具体环境,设 ...

  4. Sampling Distributions and Central Limit Theorem in R(转)

    The Central Limit Theorem (CLT), and the concept of the sampling distribution, are critical for unde ...

  5. python-冒泡排序与插入排序

    def bubble_sort(L): """ 设计思路:从前往后遍历列表,每次选取列表中两个数进行比较,如果不符合排序的规则,则进行交换 这样一次遍历后,最大(最小)的 ...

  6. Vulkan Tutorial 11 Shader modules

    操作系统:Windows8.1 显卡:Nivida GTX965M 开发工具:Visual Studio 2017 与之前的图像API不同,Vulkan中的着色器代码必须以二进制字节码的格式使用,而不 ...

  7. os模块学习小随笔

    os模块为python解释器与操作系统交互的接口 os.popen()   -------Open a pipe to or from command. The return value is an ...

  8. 记一次调试串口设备Bug的经历

    最近花了差不多1天的时间在折腾一个Bug,该Bug的表象如下: 这个Bug还特别独特,在开发电脑中无提示,在终端用户那里每次使用软件的时候都报这个.仔细思考了一下最近在源码中新添加的功能,没发现有啥特 ...

  9. JAVA中使用JSONObject对象必备

    JSON 即 JavaScript Object Natation,它是一种轻量级的数据交换格式,非常适合于服务器与 JavaScript 的交互.本文将快速讲解 JSON 格式,并通过代码示例演示如 ...

  10. C++11 单例类实现

    单例类: (1) 单例类保证全局只有一个唯一的实例对象. (2) 单例类保证只有唯一的接口获取这唯一实例. 非线程安全的单例类举例: class CSingleton { public: ~CSing ...