VB摄像头硬件拍照功能实现

作者&投稿:强温 (若有异议请与网页底部的电邮联系)
vb 制作摄像头视频拍照程序~

以面代码是我以前用的,win7应该也支持你试试

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 Const GET_FRAME As Long = 1084
Private Const COPY As Long = 1054
Private Const CONNECT As Long = 1034
Private Const DISCONNECT As Long = 1035
Private CapHwnd As Long
Private Sub Command1_Click() '截图按钮
On Error Resume Next
SendMessage CapHwnd, GET_FRAME, 0, 0
SendMessage CapHwnd, COPY, 0, 0
Image2.Picture = Clipboard.GetData
Clipboard.Clear
End Sub
Private Sub Form_Load()
'打开摄像头
CapHwnd = capCreateCaptureWindow("WebcamCapture", 0, 0, 0, 320, 240, Me.hwnd, 0)
DoEvents
SendMessage CapHwnd, CONNECT, 0, 0
Timer1.Enabled = True
End Sub
Private Sub Form_Unload(Cancel As Integer)
'停止摄像头
DoEvents: SendMessage CapHwnd, DISCONNECT, 0, 0
Timer1.Enabled = False
End Sub
Private Sub Timer1_Timer() 'timer1.Interval=50
On Error Resume Next
SendMessage CapHwnd, GET_FRAME, 0, 0
SendMessage CapHwnd, COPY, 0, 0
Image1.Picture = Clipboard.GetData
Clipboard.Clear
End Sub
'
'Private Sub Timer2_Timer()
'Static z
'z = z + 1
'SavePicture Image1.Picture, "c:\1\" & z & ".BMP" ' 将图片保存到文件。
'
'End Sub

有三种方式:
1:用video
for
windows库,这种方式是以帧的方式显示图像的,速度很慢!
你可以百度一下Vfw,有很多例子!
2:用direcrshow,编程复杂,且要保存图像的话需要自己去操作!
3:用最新的多媒体API,但是只限Vista以上的系统!
需要可以加QQ!

并不是你的问题没人会回答。而是你提问的地方不对,你这个属于硬件编程了,放到软件编程里当然没几个人会回答啦,下面是一个实例,直接点击摄像头上的拍照按钮的。Private Sub Form_Load()
Dim lpszName As String * 100
Dim lpszVer As String * 100

'创建视频窗口
'读取驱动程序列表
capGetDriverDescriptionA 0, lpszName, 100, lpszVer, 100
'创建视频窗口程序
lwndC = capCreateCaptureWindowA(lpszName, WS_CAPTION Or WS_THICKFRAME Or WS_VISIBLE Or WS_CHILD, -5, -30, Pic.Width, Pic.Height, Pic.hwnd, 0)
'把捕捉窗口连接到一个捕捉设备
If capDriverConnect(lwndC, 0) Then

' '来使预览模式的缩放有效或者无效
capPreviewScale lwndC, True

'发送给捕捉窗口来设置在预览模式下帧的显示频率
capPreviewRate lwndC, 66

'发送给捕捉窗口来使预览模式有效或者失效
capPreview lwndC, True
'调整窗体的在小及显示格式
SetWindowPos lwndC, HWND_BOTTOM, 0, 0, 430, 350, SWP_NOMOVE Or SWP_NOZORDER
End If
End Sub
模块内代码:
Public Const WS_BORDER = &H800000
Public Const WS_CAPTION = &HC00000
Public Const WS_SYSMENU = &H80000
Public Const WS_CHILD = &H40000000
Public Const WS_VISIBLE = &H10000000
Public Const WS_OVERLAPPED = &H0&
Public Const WS_MINIMIZEBOX = &H20000
Public Const WS_MAXIMIZEBOX = &H10000
Public Const WS_THICKFRAME = &H40000
Public Const WS_OVERLAPPEDWINDOW = (WS_OVERLAPPED Or WS_CAPTION Or WS_SYSMENU Or WS_THICKFRAME Or WS_MINIMIZEBOX Or WS_MAXIMIZEBOX)
Public Const SWP_NOMOVE = &H2
Public Const SWP_NOSIZE = 1
Public Const SWP_NOZORDER = &H4
Public Const HWND_BOTTOM = 1
Public Const HWND_TOPMOST = -1
Public Const HWND_NOTOPMOST = -2
Public Const SM_CYCAPTION = 4
Public Const SM_CXFRAME = 32
Public Const SM_CYFRAME = 33
Public Const WS_EX_TRANSPARENT = &H20&
Public Const GWL_STYLE = (-16)
'为窗体设置值
Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

Declare Function lStrCpy Lib "kernel32" Alias "lstrcpyA" (ByVal lpString1 As Long, ByVal lpString2 As Long) As Long
Declare Function lStrCpyn Lib "kernel32" Alias "lstrcpynA" (ByVal lpString1 As Any, ByVal lpString2 As Long, ByVal iMaxLength As Long) As Long
Declare Sub RtlMoveMemory Lib "kernel32" (ByVal hpvDest As Long, ByVal hpvSource As Long, ByVal cbCopy As Long)
Declare Sub hmemcpy Lib "kernel32" (hpvDest As Any, hpvSource As Any, ByVal cbCopy As Long)

'这个函数为窗口指定个个新位置和状态。它也可改变窗口在内部窗口列表中的位置
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
'关闭窗体及子窗体
Declare Function DestroyWindow Lib "user32" (ByVal hndw As Long) As Boolean
Declare Function GetSystemMetrics Lib "user32" (ByVal nIndex As Long) As Long
'在结构中为指定的窗口设置信息
Declare Function SetWindowText Lib "user32" Alias "SetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String) As Long

Public lwndC As Long '窗体句柄

Public Const HTCAPTION = 2
Public Const WM_NCLBUTTONDOWN = &HA1
Public Declare Function ReleaseCapture Lib "user32" () As Long
'**********************************'保存窗口最前
Public Const WM_USER = &H400 '偏移地址

Type POINTAPI
X As Long
Y As Long
End Type
'调用一个窗口的窗口函数,将一条消息发给那个窗口。直到消息被处理完毕,该函数才会返回
'hwnd(long)要接收消息的那个窗口的句柄、 wmsg(long)消息的标识符 、wparam(long)具体取决于消息 iparam(ANY)具体取决于消息
Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Integer, ByVal lParam As Long) As Long
Declare Function SendMessageS Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Integer, ByVal lParam As String) As Long

Public Const WM_CAP_START = WM_USER '开始址

Public Const WM_CAP_GET_CAPSTREAMPTR = WM_CAP_START + 1 '

Public Const WM_CAP_SET_CALLBACK_ERROR = WM_CAP_START + 2 '在程序设定当发生错误时调用的回调函数
Public Const WM_CAP_SET_CALLBACK_STATUS = WM_CAP_START + 3 '在程序中设定当状态改变时调用的回调函数
Public Const WM_CAP_SET_CALLBACK_YIELD = WM_CAP_START + 4 '在程序中设定当程序让位时调用的回调函数
Public Const WM_CAP_SET_CALLBACK_FRAME = WM_CAP_START + 5 '在程序中设定当预览帧被捕捉时调用的加调函数
Public Const WM_CAP_SET_CALLBACK_VIDEOSTREAM = WM_CAP_START + 6 '在程序中设定当一个新的视频缓冲区可以时调用的回调函数
Public Const WM_CAP_SET_CALLBACK_WAVESTREAM = WM_CAP_START + 7 '在程序中设定当一个新的音频缓冲区可以时调用的回调函数

Public Const WM_CAP_GET_USER_DATA = WM_CAP_START + 8 '把数据关联到一个捕捉窗口,可以获取一个长整型数据
Public Const WM_CAP_SET_USER_DATA = WM_CAP_START + 9 '把数据关联到一个捕捉窗口,'可以设置一个长整型数据

Public Const WM_CAP_DRIVER_CONNECT = WM_CAP_START + 10 '把捕捉窗口连接到一个捕捉设备
Public Const WM_CAP_DRIVER_DISCONNECT = WM_CAP_START + 11 ''用来断开捕捉驱动器和捕捉窗口之间的连接
Public Const WM_CAP_DRIVER_GET_NAME = WM_CAP_START + 12 '连接到'来得到已连接到某个捕捉窗口的捕捉设备驱动程序的名字
Public Const WM_CAP_DRIVER_GET_VERSION = WM_CAP_START + 13 '得到驱动程序的版本号
Public Const WM_CAP_DRIVER_GET_CAPS = WM_CAP_START + 14 '来得到捕捉窗口的硬件的性能。
'捕捉文件和缓存
Public Const WM_CAP_FILE_SET_CAPTURE_FILE = WM_CAP_START + 20 '可以指定另一个路径和文件名。这个消息指定文件名,但不创建文件,也不打开文件或为文件申请空间
Public Const WM_CAP_FILE_GET_CAPTURE_FILE = WM_CAP_START + 21 '来得到当前的捕捉文件
Public Const WM_CAP_FILE_ALLOCATE = WM_CAP_START + 22 '为捕捉文件预分配空间,从而可以减少被漏掉的帧
Public Const WM_CAP_FILE_SAVEAS = WM_CAP_START + 23 '将捕捉文件保存为另一个用户指定的文件。这个消息不会改变捕捉文件的名字和内容,
'由于捕捉文件保留它最初的文件名,因此必须指定个新的文件的文件名来保存
Public Const WM_CAP_FILE_SET_INFOCHUNK = WM_CAP_START + 24 '可以把信息块例如文本或者自定义数据插入avi文件。同样用这个消息也可以清除avi文件中的信息块
Public Const WM_CAP_FILE_SAVEDIB = WM_CAP_START + 25 '把从帧缓存中复制出图像存为设备无关位图书馆(DIB),应用程序也可以使用这两个单帧捕捉消息来编辑帧序列,
'或者创建一个慢速摄影序列

Public Const WM_CAP_EDIT_COPY = WM_CAP_START + 30 '一旦捕捉到图像,把缓存中图像复制到剪贴板中

Public Const WM_CAP_SET_AUDIOFORMAT = WM_CAP_START + 35 '设置音频格式。设置时传入一个WAVEFORMAT、WAVEFORMATEX、或PCMWAVEOFMAT结构的指针
Public Const WM_CAP_GET_AUDIOFORMAT = WM_CAP_START + 36 '来得到音频数据的格式和该格式结构体的大小。默认的捕捉音频格式是mono、8-bit和11kHZ PCM

Public Const WM_CAP_DLG_VIDEOFORMAT = WM_CAP_START + 41 '对数字化后的视频帧的大小和图像深度,以及被捕捉视频的数据的压缩方式的选择
Public Const WM_CAP_DLG_VIDEOSOURCE = WM_CAP_START + 42 '视频对话框,用来枚举连接视频源的捕捉卡的信号种类,并且
'控制颜色、对比度、饱和度的改变,如果视频驱动程序支技,可以用这个对话框
Public Const WM_CAP_DLG_VIDEODISPLAY = WM_CAP_START + 43 '视频显示对话框控制视频捕捉过程中视频在显示器上的显示。对捕捉数据无影响,但会影响数了信号表达式

Public Const WM_CAP_GET_VIDEOFORMAT = WM_CAP_START + 44 '给捕捉窗口来得到视频格式的结构和该结构的大小。
Public Const WM_CAP_SET_VIDEOFORMAT = WM_CAP_START + 45 '用来设置视频格式
Public Const WM_CAP_DLG_VIDEOCOMPRESSION = WM_CAP_START + 46 ' 视频压缩对话框

Public Const WM_CAP_SET_PREVIEW = WM_CAP_START + 50 '发送给捕捉窗口来使预览模式有效或者失效
Public Const WM_CAP_SET_OVERLAY = WM_CAP_START + 51 '使窗口处于叠加模式。使叠加模式有效也会自动地使预览模式失效
Public Const WM_CAP_SET_PREVIEWRATE = WM_CAP_START + 52 '发送给捕捉窗口来设置在预览模式下帧的显示频率
Public Const WM_CAP_SET_SCALE = WM_CAP_START + 53 '来使预览模式的缩放有效或者无效
Public Const WM_CAP_GET_STATUS = WM_CAP_START + 54 '得到捕捉窗口的当前状态
Public Const WM_CAP_SET_SCROLL = WM_CAP_START + 55 '如果是在预览模式或者叠加模式,还可以通过本消息发送给窗口,
'在窗口里的用户区域设置视频帧的滚动条的位置

'定义结束时响应信息
Public Const WM_CAP_SET_CALLBACK_CAPCONTROL = WM_CAP_START + 85

Public Const WM_CAP_END = WM_CAP_SET_CALLBACK_CAPCONTROL

'// 导入avicap32.dll连接库下的两个函数
Declare Function capCreateCaptureWindowA Lib "avicap32.dll" ( _
ByVal lpszWindowName As String, _
ByVal dwStyle As Long, _
ByVal X As Long, ByVal Y As Long, ByVal nWidth As Long, ByVal nHeight As Integer, _
ByVal hWndParent As Long, ByVal nID As Long) As Long
Declare Function capGetDriverDescriptionA Lib "avicap32.dll" ( _
ByVal wDriver As Integer, _
ByVal lpszName As String, _
ByVal cbName As Long, _
ByVal lpszVer As String, _
ByVal cbVer As Long) As Boolean

Function capDriverConnect(ByVal lwnd As Long, ByVal i As Integer) As Boolean
'把捕捉窗口连接到一个捕捉设备
capDriverConnect = SendMessage(lwnd, WM_CAP_DRIVER_CONNECT, i, 0)
End Function
Function capDriverDisconnect(ByVal lwnd As Long) As Boolean
''用来断开捕捉驱动器和捕捉窗口之间的连接
capDriverDisconnect = SendMessage(lwnd, WM_CAP_DRIVER_DISCONNECT, 0, 0)
End Function
Function capDriverGetName(ByVal lwnd As Long, ByVal szName As Long, ByVal wSize As Integer) As Boolean
'获得驱动程序名字
capDriverGetName = SendMessage(lwnd, YOURCONSTANTMESSAGE, wSize, szName)
End Function
Function capDriverGetCaps(ByVal lwnd As Long, ByVal s As Long, ByVal wSize As Integer) As Boolean
'来得到捕捉窗口的硬件的性能
capDriverGetCaps = SendMessage(lwnd, WM_CAP_DRIVER_GET_CAPS, wSize, s)
End Function

Function capPreview(ByVal lwnd As Long, ByVal f As Boolean) As Boolean
'发送给捕捉窗口来使预览模式有效或者失效
capPreview = SendMessage(lwnd, WM_CAP_SET_PREVIEW, f, 0)
End Function
Function capPreviewRate(ByVal lwnd As Long, ByVal wMS As Integer) As Boolean
'发送给捕捉窗口来设置在预览模式下帧的显示频率
capPreviewRate = SendMessage(lwnd, WM_CAP_SET_PREVIEWRATE, wMS, 0)
End Function
Function capPreviewScale(ByVal lwnd As Long, ByVal f As Boolean) As Boolean
'来使预览模式的缩放有效或者无效
capPreviewScale = SendMessage(lwnd, WM_CAP_SET_SCALE, f, 0)
End Function虽然说摄像头的制作是有一定标准的,但是我们并不能保证所有的摄像头都会按照这个标准去做,特别是水货的冒牌的还有一些杂牌的。如果你的摄像头是名牌的话,那就没问题了。

我有个3方控件,可以捕捉到摄像头的数据,可以截图,可以录像,加上源代码,如果需要的话加我Q.


环宇飞扬无驱B摄像头基本参数
环宇飞扬的无驱B摄像头是一款高清全玻球面镜头设计的产品,采用CMOS传感器,其像素达到了500万,能够提供清晰的图像质量。它的最高分辨率达到了800×600dpi,足以满足日常家用和台式机、笔记本的使用需求。这款摄像头支持无驱版设计,安装简便,无需额外驱动即可在Windows XP SP2和Windows Vista操作系统上正常...

黑莓BB10 Dev Alpha B拍照功能
黑莓BB10 Dev Alpha B的摄像头配置相当出色,内置一枚800万像素的主摄像头,能够提供清晰的影像捕捉。这款手机支持数码变焦功能,用户可以根据需要对远处的景物进行放大,增加拍摄的灵活性。在拍摄模式上,它也具备场景模式,可以智能识别并调整拍摄环境,帮助用户轻松拍出专业级别的照片。对于自拍爱好者,黑...

三星B5510的拍照功能
摄像头 内置摄像头像素 300万像素照片特效 支持图像尺寸 最大支持2048×1536像素照片拍摄连拍功能 支持

摄像头208b是什么意思
摄像头208b是指的摄像头的型号,一般都是一个类型的代码,为了方便寻找才这么标注的。

sony SR 45h\/b摄像头高级功能
不知道 楼主的摄像头具体型号是什么。SONY SR 只是大概型号啊,不好找驱动。这是SONY官方网站的驱动下载地址,你可以在快速导航的里输入型号查找并下载,就可以解决问题了。http:\/\/service.sony.com.cn\/vaio\/index.htm 还有就是楼主的摄像头设置正不正确啊,请按照说明书认真检查。

三星B5330(Galaxy Chat)拍照功能
三星B5330(Galaxy Chat)的拍照功能表现出色,配备了一颗内置的摄像头,它的主要特性在于其后置摄像头,像素达到了200万。这意味着用户可以拍摄出清晰度较高的照片,最大支持的图像尺寸为1600×1200像素,足以满足日常拍摄和分享的需求。在视频录制方面,B5330同样支持240p的视频拍摄,分辨率为320×240像素...

三星B7732U(大器)拍照功能
三星B7732U(大器)在拍照方面提供了不错的功能。它内置了一颗单摄像头,拥有500万像素的后置摄像头,足以满足日常的拍摄需求。摄像头采用CMOS传感器,提供了丰富的场景模式,让你能够根据拍摄环境调整拍摄效果。此外,照片特效功能也支持,让你能够轻松创造出更多个性化的照片。在图像尺寸上,B7732U能够拍摄...

黑莓Dev Alpha B基本功能
在导航方面,黑莓Dev Alpha B内置GPS,并支持A-GPS,电子罗盘、重力感应器、光线传感器和距离传感器等辅助设备,确保用户在复杂的环境中也能准确导航。在拍照功能方面,内置的摄像头提供了基础的拍照体验。娱乐功能方面,设备支持3GP\/MP4格式的视频播放和MIDI\/MP3\/AAC等格式的音频播放,同时具备和弦铃音和MP...

三星B3210U拍照功能
三星B3210U手机拥有出色的拍照性能,其内置摄像头配备了一颗200像素的传感器,采用CMOS技术,能捕捉清晰的影像。它的最大照片拍摄分辨率可达到1600×1200像素,无论是日常记录还是稍微精细的场景,都能呈现细腻的细节。在视频拍摄方面,三星B3210U支持144p的视频录制,分辨率为176×144像素,每秒播放15帧,...

三星B2710的视频拍摄支持哪些特效?
自动对焦功能的加入,让对焦更加精准,无需担心拍摄时的模糊问题。而且,传感器类型为CMOS,在低光环境下也能保证良好的成像效果。场景模式的设定则让摄影新手也能轻松应对不同环境下的拍摄,如需切换到特定的拍摄模式,只需一键操作即可。总的来说,三星B2710的摄像头设计简洁实用,无论是静态照片还是动态...

霍林郭勒市19579106542: 如何通过vb来捕捉摄像头的图像 -
贸农美迪: 使用API Declare Function capCreateCaptureWindowA Lib "avicap32.dll" ( _ ByVal lpszWindowName As String, _ ByVal dwStyle As Long, _ ByVal x As Long, ByVal y As Long, ByVal nWidth As Long, ByVal nHeight As Integer, _ ByVal ...

霍林郭勒市19579106542: 急急急!!!!vb中怎么 调用usb摄像头拍照程序? -
贸农美迪: 有驱动就直接调驱动..没驱动有提供API的就调API..什么都没的..就没的说了..即使做个USB通信也要驱动

霍林郭勒市19579106542: 使用VB语言编写,在界面上画个框,里面显示摄像头里的图像 -
贸农美迪: 就是用摄像头来拍个照嘛...'一个VB制作摄像头拍照的源码,如下:Private Declare Function capCreateCaptureWindow Lib "avicap32.dll" _ Alias "capCreateCaptureWindowA" ( _ ByVal lpszWindowName As String, _ ByVal dwStyle As Long...

霍林郭勒市19579106542: 如何用VB程序做一个摄像头调用 -
贸农美迪: 有三种方式: 1:用video for windows库,这种方式是以帧的方式显示图像的,速度很慢! 你可以百度一下Vfw,有很多例子! 2:用direcrshow,编程复杂,且要保存图像的话需要自己去操作! 3:用最新的多媒体API,但是只限Vista以上的系统! 需要可以加QQ!

霍林郭勒市19579106542: 求教如何用vb程序实现打开自己摄像头,要全代码 -
贸农美迪: 那可否编写代码实现 ,发给对方,对方运行后,就会打开自己的摄像头,进行视频聊天.

霍林郭勒市19579106542: 用VB怎么制作摄像头拍照并保存到本地的程序? -
贸农美迪: 在窗体中建四个command按钮,复制以下代码' '以下是完整代码,在 VB6 和 WindowsXP 下调试通过:'在窗体放置4个控件:Command1、Command2、Command3、Command4'程序调试时要注意:终止程序要用运行中的 Form1 窗口关闭....

霍林郭勒市19579106542: vb.net如何在win10的平板上用摄像头 -
贸农美迪: 展开全部1.点击打开开始菜单 - 电脑设置,打开电脑设置窗口.如下图所示2.在打开的电脑设置窗口中,点击打开“隐私”项进入下一步操作.如下图所示3.在隐私功能界面中,找到“摄像头”点击打开.如下图所示4.点击将允许应用使用我的摄像头开启,关闭电脑设置窗口完成操作.如下图所示

霍林郭勒市19579106542: vb如何调用usb摄像头
贸农美迪: Private Const WS_CHILD = &H40000000 Private Const WS_VISIBLE = &H10000000 Private Const WM_CAP_START = &H400 Private Const WM_CAP_DRIVER_CONNECT = WM_CAP_START + 10 Private Const WM_CAP_SET_SCALE = ...

霍林郭勒市19579106542: vb中可以调整摄像头分辨率吗,该怎么处理 -
贸农美迪: 摄像头是硬件,硬件应该有驱动.vb调用摄像头也是调用驱动.能不能调整,要看硬件支持不支持,还有驱动接口有没有,而不是看vb的功能.具体如何处理,需要看摄像头的相关文档.以上都是废话,下面总结一下.据我猜测是不可以的.猜的啊.

霍林郭勒市19579106542: VB中如何启动摄像头? -
贸农美迪: http://www.codefans.net/soft/2840.shtml 以前在网上看到的源码.你可以修改它,使它达到你的要求,相信这对你来说不算什么难事!加油吧^_^

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网