vb.net怎么调用摄像头拍照?有感兴趣的小伙伴就和小编一起看看吧
方法/步骤
-
1
Imports SystemImports System.Runtime.InteropServicesImports System.DrawingImports System.Drawing.ImagingClass Camera Private Const WM_CAP_START = WM_USER Private Const WM_CAP_STOP = WM_CAP_START + 68 Private Const WM_CAP_DRIVER_CONNECT = WM_CAP_START + 10 Private Const WM_CAP_DRIVER_DISCONNECT = WM_CAP_START + 11 Private Const WM_CAP_SAVEDIB = WM_CAP_START + 25 Private Const WM_CAP_GRAB_FRAME = WM_CAP_START + 60 Private Const WM_CAP_SEQUENCE = WM_CAP_START + 62 Private Const WM_CAP_FILE_SET_CAPTURE_FILEA = WM_CAP_START + 20 Private Const WM_CAP_SEQUENCE_NOFILE = WM_CAP_START + 63 Private Const WM_CAP_SET_OVERLAY = WM_CAP_START + 51 Private Const WM_CAP_SET_PREVIEW = WM_CAP_START + 50 Private Const WM_CAP_SET_CALLBACK_VIDEOSTREAM = WM_CAP_START + 6 Private Const WM_CAP_SET_CALLBACK_ERROR = WM_CAP_START + 2 Private Const WM_CAP_SET_CALLBACK_STATUSA = WM_CAP_START + 3 Private Const WM_CAP_SET_CALLBACK_FRAME = WM_CAP_START + 5 Private Const WM_CAP_SET_SCALE = WM_CAP_START + 53 Private Const WM_CAP_SET_PREVIEWRATE = WM_CAP_START + 52 Sub New(ByVal I As PictureBox) o = I End Sub
-
2
SendMessage(M_Handle, WM_CAP_EDIT_COPY, 0, 0) Return Clipboard.GetImage End Function Function CreateCaptureWindow(ByVal hWndParent As PictureBox, ByVal x As Integer, ByVal y As Integer, ByVal nWidth As Integer, ByVal nHeight As Integer, ByVal nCameraID As Integer) As Integer Dim Preview_Handle As Integer Preview_Handle = capCreateCaptureWindow("Video", _ WS_CHILD + WS_VISIBLE, x, y, _ hWndParent.Width, hWndParent.Height, hWndParent.Handle, 0) Dim BOOL As Boolean BOOL = SendMessage(Preview_Handle, WM_CAP_DRIVER_CONNECT, nCameraID, 0) 'ncameraid(视频只有一个为0,多个以此类推) If (BOOL = False) Then MsgBox("没有找到视频设备!") End If 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) M_Handle = Preview_Handle Return Preview_Handle End Function
-
3
Dim blnRunning As Boolean = False Public Sub Disconnect() SendMessage(M_Handle, WM_CAP_DRIVER_DISCONNECT, 0, 0) End Sub Dim blnRecording As Boolean = False '录像 Public Sub KineScope(ByVal path As String) If blnRecording Then Return Else blnRecording = True End If 'path:要保存avi文件的路径 Dim hBmp As IntPtr = Marshal.StringToHGlobalAnsi(path) SendMessage(M_Handle, WM_CAP_FILE_SET_CAPTURE_FILEA, 0, hBmp.ToInt64()) SendMessage(M_Handle, WM_CAP_SEQUENCE, 0, 0) End Sub Public Sub StopKinescope() If blnRecording Then SendMessage(M_Handle, WM_CAP_STOP, 0, 0) End If blnRecording = False End SubEnd Class上面是camera.vb接口类
-
4
下面是实现formPublic Class CamoraForm Dim camora As New Camera(PictureBox1) Private Sub CamoraForm_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load End Sub Private Sub CommendStart_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CommendStart.Click camora.CreateCaptureWindow(PictureBox1, 0, 0, PictureBox1.Width, PictureBox1.Height, 0) End Sub Private Sub CommendStop_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CommendStop.Click camora.StopKinescope() camora.Disconnect() End Sub
END
文章评论