Winform程式調用網路攝影機

來源:互聯網
上載者:User

標籤:winform   style   blog   color   os   io   使用   ar   for   

如下代碼可以直接使用!

using System;using System.Collections.Generic;using System.Text;using System.Runtime.InteropServices;public class VideoWork{    private const int WM_USER = 0x400;    private const int WS_CHILD = 0x40000000;    private const int WS_VISIBLE = 0x10000000;    private const int WM_CAP_START = WM_USER;    private const int WM_CAP_STOP = WM_CAP_START + 68;    private const int WM_CAP_DRIVER_CONNECT = WM_CAP_START + 10;    private const int WM_CAP_DRIVER_DISCONNECT = WM_CAP_START + 11;    private const int WM_CAP_SAVEDIB = WM_CAP_START + 25;    private const int WM_CAP_GRAB_FRAME = WM_CAP_START + 60;    private const int WM_CAP_SEQUENCE = WM_CAP_START + 62;    private const int WM_CAP_FILE_SET_CAPTURE_FILEA = WM_CAP_START + 20;    private const int WM_CAP_SEQUENCE_NOFILE = WM_CAP_START + 63;    private const int WM_CAP_SET_OVERLAY = WM_CAP_START + 51;    private const int WM_CAP_SET_PREVIEW = WM_CAP_START + 50;    private const int WM_CAP_SET_CALLBACK_VIDEOSTREAM = WM_CAP_START + 6;    private const int WM_CAP_SET_CALLBACK_ERROR = WM_CAP_START + 2;    private const int WM_CAP_SET_CALLBACK_STATUSA = WM_CAP_START + 3;    private const int WM_CAP_SET_CALLBACK_FRAME = WM_CAP_START + 5;    private const int WM_CAP_SET_SCALE = WM_CAP_START + 53;    private const int WM_CAP_SET_PREVIEWRATE = WM_CAP_START + 52;    private IntPtr hWndC;    private bool bWorkStart = false;    private IntPtr mControlPtr;    private int mWidth;    private int mHeight;    private int mLeft;    private int mTop;    /**/    ///   <summary>     ///   初始化顯示映像     ///   </summary>     ///   <param   name= "handle "> 控制項的控制代碼 </param>     ///   <param   name= "left "> 開始顯示的左邊距 </param>     ///   <param   name= "top "> 開始顯示的上邊距 </param>     ///   <param   name= "width "> 要顯示的寬度 </param>     ///   <param   name= "height "> 要顯示的長度 </param>     public VideoWork(IntPtr handle, int left, int top, int width, int height)    {        mControlPtr = handle;        mWidth = width;        mHeight = height;        mLeft = left;        mTop = top;    }    [DllImport("avicap32.dll ")]    private static extern IntPtr capCreateCaptureWindowA(byte[] lpszWindowName, int dwStyle, int x, int y, int nWidth, int nHeight, IntPtr hWndParent, int nID);    [DllImport("avicap32.dll ")]    private static extern int capGetVideoFormat(IntPtr hWnd, IntPtr psVideoFormat, int wSize);    //     //這裡特別注意,因為WinAPI中的long為32位,而C#中的long為64wei,所以需要將lParam該為int     //     [DllImport("User32.dll ")]    private static extern bool SendMessage(IntPtr hWnd, int wMsg, int wParam, int lParam);    /**/    ///   <summary>     ///   開始顯示映像     ///   </summary>     public void Start()    {        if (bWorkStart)            return;        bWorkStart = true;        byte[] lpszName = new byte[100];        hWndC = capCreateCaptureWindowA(lpszName, WS_CHILD | WS_VISIBLE, mLeft, mTop, mWidth, mHeight, mControlPtr, 0);        if (hWndC.ToInt32() != 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);            //Global.log.Write( "SendMessage ");         }        return;    }    /**/    ///   <summary>     ///   停止顯示     ///   </summary>     public void Stop()    {        SendMessage(hWndC, WM_CAP_DRIVER_DISCONNECT, 0, 0);        bWorkStart = false;    }    /**/    ///   <summary>     ///   抓圖     ///   </summary>     ///   <param   name= "path "> 要儲存bmp檔案的路徑 </param>     public void GrabImage(string path)    {        IntPtr hBmp = Marshal.StringToHGlobalAnsi(path);        SendMessage(hWndC, WM_CAP_SAVEDIB, 0, hBmp.ToInt32());    }}調用方法:在表單上拖入一個panel調用代碼為:VideoWork wv = new VideoWork(panel1.Handle, 0, 0, panel1.Width, panel1.Height);wv.Start();

以上代碼,可實現及上傳,根據需要調用不同方法!

Winform程式調用網路攝影機

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.