VB6之摄像头控制
直接上代码:
'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之摄像头控制的更多相关文章
- unity中camera摄像头控制详解
目录 1. 缘起 2. 开发 2.1. 建立项目 2.2. 旋转 2.2.1. 四元数 2.3. 移动 2.3.1. 向量操作 2.4. 镜头拉伸 2.5. 复位 2.6. 优化 1 缘起 我们的产品 ...
- OpenCV系列--摄像头控制的简单代码
操作系统:windows xp 开发工具:VS2008 opencv版本:2.1.0 依赖库:OpenCV2.1\lib\highgui.lib #include "cv.h" # ...
- 【转载】OpenCV 摄像头控制
参考:[OpenCV] -- 简单摄像头操作 - 代码人生 - 博客频道 - CSDN.NET http://blog.csdn.net/qiurisuixiang/article/details/8 ...
- C#控制操控操作多个UVC摄像头设备
有时,我们需要在C#代码中对多个UVC摄像头进行操作,如何实现呢? 建立基于SharpCamera的项目 首先,请根据之前的一篇博文 点击这里 中的说明,建立基于SharpCamera的摄像头控制项目 ...
- C# Aforge设置摄像头视频属性和控制属性
修改后的代码:github 一.调用windows自身摄像头属性设置窗口 使用VideoCaptureDevice对象的DisplayPropertyPage(IntPtr parentWindow) ...
- 通过ISAPI http协议控制海康摄像头
一直用海康的SDK进行摄像头控制,但有时候非常不灵活,必须有X86的主机,在嵌入式上面就不行,通过写一个HTTPCLIENT可以通过ISAPI来控制海康的摄像头. 代码如下:git@github.co ...
- 第46章 DCMI—OV5640摄像头—零死角玩转STM32-F429系列
第46章 DCMI—OV5640摄像头 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com ...
- 第45章 DCMI—OV2640摄像头—零死角玩转STM32-F429系列
第45章 DCMI—OV2640摄像头 全套200集视频教程和1000页PDF教程请到秉火论坛下载:www.firebbs.cn 野火视频教程优酷观看网址:http://i.youku.com ...
- C#读写修改设置调整UVC摄像头画面-缩放
有时,我们需要在C#代码中对摄像头的缩放进行读和写,并立即生效.如何实现呢? 建立基于SharpCamera的项目 首先,请根据之前的一篇博文 点击这里 中的说明,建立基于SharpCamera的摄像 ...
随机推荐
- 关于ubuntu的图标创建以及快捷方式打开
//这里个人要添加的的为微信小程序开发工具 1:终端命令: sudo gedit /usr/share/applications/MyChat.desktop 2:修改启动器配置如下: [Deskto ...
- 1.Java 加解密技术系列之 BASE64
Java 加解密技术系列之 BASE64 序号 背景 正文 总结 序 这段时间,工作中 用到了 Java 的加解密技术,本着学习的态度,打算从这篇文章开始,详细的研究一番 Java 在加解密技术上有什 ...
- File 常用方法
1.判断当前文件是否封装的文件夹目录 //返回true--是,false--不是 File file =new File("C:\\Users\\mac\\Desktop\\复习.txt&q ...
- 给sftp创建新用户、默认打开和限制在某个目录
一.环境: CentOS 6.8 使用 FileZilla 进行 sftp 连接 二.背景 给外包的工作人员提供我司服务器的某一目录的访问(包括读写)权限,方便他们部署代码文件. 之所以是某一目录的访 ...
- Running R jobs quickly on many machines(转)
As we demonstrated in “A gentle introduction to parallel computing in R” one of the great things abo ...
- centos6.5 修改java环境变量
[root@m1 ~]# cat /etc/profile export JAVA_HOME=/usr/local/soft/jdkexport PATH=$JAVA_HOME/bin:$PATH e ...
- react router 4.0以上的路由应用
thead>tr>th{padding:8px;line-height:1.4285714;border-top:1px solid #ddd}.table>thead>tr& ...
- ZooKeeper分布式锁浅谈(一)
一.概述 清明节的时候写了一篇分布式锁概述,里面介绍了分布式锁实现的几种方式,其实那时候我一直沉迷于使用redis的悲观锁和乐观锁来实现分布式锁,直到一个血案的引发才让我重新认识了redis分布式锁的 ...
- javaSE_05Java中方法(函数)与重载、递归-思维导图
思维导图看不清楚时: 1)可以将图片另存为图片,保存在本地来查看 2)右击在新标签中打开放大查看
- mysql安装报错
一: -- MySQL 5.5.22Warning: Bison executable not found in PATH-- Configuring done-- Generating done-- ...