vb.net怎么调用摄像头拍照

2022年5月17日 22点热度 0人点赞

vb.net怎么调用摄像头拍照?有感兴趣的小伙伴就和小编一起看看吧

工具/原料

  • 电脑
  • 数码相机

方法/步骤

  1. 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. 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. 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. 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

注意事项

  • 注意大小写
经验内容仅供参考,如果您需解决具体问题(尤其法律、医学等领域),建议您详细咨询相关领域专业人士。
作者声明:本篇经验系本人依照真实经历原创,未经许可,谢绝转载。
展开阅读全部

laozhao

这个人很懒,什么都没留下

文章评论