zoukankan      html  css  js  c++  java
  • VFP调用API来控制USB摄像头,实现拍照或录像

    *--前提:VFP7.0以上;Windows 2K及以上
    *--控件:AVICAP32.DLL

    *--定义:一般放到主程序或表单(集)的Load事件中
    Public WM_CAP_DRIVER_DISCONNECT
    Public hwndc,WM_CAP_SAVEDIB,WM_CAP_FILE_SET_CAPTURE_FILEA,WM_CAP_SEQUENCE,WM_CAP_STOP
    Declare Integer capCreateCaptureWindowA In "AVICAP32.DLL" String lpszWindowName ,Integer dwStyle ,;
    Integer x, Integer Y, Integer nWidth ,Integer nHeight,Integer ParentWin,Integer nId
    Declare Integer SendMessage In "user32" Integer HWnd, Integer wmsg,Integer wpar1, Integer wpar2
    Declare Integer SendMessage In "user32" As SendMessageA Integer HWnd, Integer wmsg,Integer wpar1, String wpar2

    *--显示:可以放到按钮或表单(集)的Init事件中
    WM_USER = 1024
    WM_CAP_START = WM_USER
    WM_CAP_STOP = WM_CAP_START + 68
    WM_CAP_DRIVER_CONNECT = WM_CAP_START + 10
    WM_CAP_DRIVER_DISCONNECT = WM_CAP_START + 11
    WM_CAP_SAVEDIB = WM_CAP_START + 25
    WM_CAP_GRAB_FRAME = WM_CAP_START + 60
    WM_CAP_SEQUENCE = WM_CAP_START + 62
    WM_CAP_FILE_SET_CAPTURE_FILEA = WM_CAP_START + 20
    WM_CAP_SEQUENCE_NOFILE =WM_CAP_START+ 63
    WM_CAP_SET_OVERLAY =WM_CAP_START+ 51
    WM_CAP_SET_PREVIEW =WM_CAP_START+ 50
    WM_CAP_SET_CALLBACK_VIDEOSTREAM = WM_CAP_START +6
    WM_CAP_SET_CALLBACK_ERROR=WM_CAP_START +2
    WM_CAP_SET_CALLBACK_STATUSA= WM_CAP_START +3
    WM_CAP_SET_CALLBACK_FRAME= WM_CAP_START +5
    WM_CAP_SET_SCALE=WM_CAP_START+ 53
    WM_CAP_SET_PREVIEWRATE=WM_CAP_START+ 52
    *第3、4个参数是定义显示位置,第5、6个参数是定义显示大小。
    hWndC = capCreateCaptureWindowA('My Own Capture Window',1342177280,0,0,320,240,Thisform.HWnd ,0)
    If hWndC <> 0
    SendMessage(hWndC, WM_CAP_SET_CALLBACK_VIDEOSTREAM, 0, 0)
    SendMessage(hWndC, WM_CAP_SET_CALLBACK_ERROR, 0, 0)
    SendMessage(hWndC, WM_CAP_SET_CALLBACK_STATUSA, 0, 0)
    SendMessage(hWndC, WM_CAP_DRIVER_CONNECT, 0, 0)
    SendMessage(hWndC, WM_CAP_SET_SCALE, 1, 0)
    SendMessage(hWndC, WM_CAP_SET_PREVIEWRATE, 66, 0)
    SendMessage(hWndC, WM_CAP_SET_OVERLAY, 1, 0)
    SendMessage(hWndC, WM_CAP_SET_PREVIEW, 1, 0)
    * THISFORM.ACTIVATE
    Endif

    *--关闭显示:
    SendMessage(hWndC,WM_CAP_DRIVER_DISCONNECT, 0, 0)
    hWndC=0

    *--保存图像:
    *--无法控制生成的文件尺寸,因为是由摄像头本身默认的,不过可用Image控件显示时进行等比缩小的。
    ss=Getfile("bmp;Jpg")
    If !Empty(ss)
    SendMessageA(hWndC,WM_CAP_SAVEDIB,0,ss)
    Endif

    *--录像:
    ss = Getfile("avi")
    If !Empty(ss)
    SendMessageA(hWndC,WM_CAP_FILE_SET_CAPTURE_FILEA,0,ss)
    SendMessageA(hWndC, WM_CAP_SEQUENCE, 0, 0)
    This.Enabled=.F.
    Thisform.MousePointer= 0
    Thisform.停止录像按钮.Enabled=.T.
    Endif

    *--停止录像:
    SendMessage(hWndC, WM_CAP_STOP, 0, 0)
    Thisform.开始录像按钮.Enabled=.T.
    This.Enabled=.F.

  • 相关阅读:
    如何为你的Airtest报告自定义名称
    Go打包构建 生成32位64位应用程序 加入前端项目
    DNS解析与DNS缓存清理
    sharepoint2013安装记录
    C# winform自托管WebApi及身份信息加密、Basic验证、Http Message Handler、跨域配置
    IM扫码登录技术专题(四):你真的了解二维码吗?刨根问底、一文掌握!
    IM开发干货分享:万字长文,详解IM“消息“列表卡顿优化实践
    阿里IM技术分享(五):闲鱼亿级IM消息系统的及时性优化实践
    使用oracle序列+oracle定时任务获取每月从1开始的流水码
    为什么我的数据库查询越来越慢
  • 原文地址:https://www.cnblogs.com/hnllhq/p/12286782.html
Copyright © 2011-2022 走看看