• showVideo C#版 摄像头驱动程序 武胜


    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Runtime.InteropServices;


    namespace WebCamera
    {
    class showVideo
    {
    // showVideo calls
    [DllImport("avicap32.dll")]
    public static extern IntPtr capCreateCaptureWindowA(byte[] lpszWindowName, int dwStyle, int x, int y, int nWidth, int nHeight, IntPtr hWndParent, int nID);
    [DllImport("avicap32.dll")]
    public static extern bool capGetDriverDescriptionA(short wDriver, byte[] lpszName, int cbName, byte[] lpszVer, int cbVer);
    [DllImport("User32.dll")]
    public static extern bool SendMessage(IntPtr hWnd, int wMsg, bool wParam, int lParam);
    [DllImport("User32.dll")]
    public static extern bool SendMessage(IntPtr hWnd, int wMsg, short wParam, int lParam);
    [DllImport("User32.dll")]
    public static extern bool SendMessage(IntPtr hWnd, int wMsg, short wParam, FrameEventHandler lParam);
    [DllImport("User32.dll")]
    public static extern bool SendMessage(IntPtr hWnd, int wMsg, int wParam, ref BITMAPINFO lParam);
    [DllImport("User32.dll")]
    public static extern int SetWindowPos(IntPtr hWnd, int hWndInsertAfter, int x, int y, int cx, int cy, int wFlags);
    [DllImport("avicap32.dll")]
    public static extern int capGetVideoFormat(IntPtr hWnd, IntPtr psVideoFormat, int wSize);

    // Constants
    public const int WM_USER = 0x400;
    public const int WS_CHILD = 0x40000000;
    public const int WS_VISIBLE = 0x10000000;
    public const int SWP_NOMOVE = 0x2;
    public const int SWP_NOZORDER = 0x4;
    public const int WM_CAP_DRIVER_CONNECT = WM_USER + 10;
    public const int WM_CAP_DRIVER_DISCONNECT = WM_USER + 11;
    public const int WM_CAP_SET_CALLBACK_FRAME = WM_USER + 5;
    public const int WM_CAP_SET_PREVIEW = WM_USER + 50;
    public const int WM_CAP_SET_PREVIEWRATE = WM_USER + 52;
    public const int WM_CAP_SET_VIDEOFORMAT = WM_USER + 45;

    // Structures
    [StructLayout(LayoutKind.Sequential)]
    public struct VIDEOHDR
    {
    [MarshalAs(UnmanagedType.I4)]
    public int lpData;
    [MarshalAs(UnmanagedType.I4)]
    public int dwBufferLength;
    [MarshalAs(UnmanagedType.I4)]
    public int dwBytesUsed;
    [MarshalAs(UnmanagedType.I4)]
    public int dwTimeCaptured;
    [MarshalAs(UnmanagedType.I4)]
    public int dwUser;
    [MarshalAs(UnmanagedType.I4)]
    public int dwFlags;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 4)]
    public int[] dwReserved;
    }

    [StructLayout(LayoutKind.Sequential)]
    public struct BITMAPINFOHEADER
    {
    [MarshalAs(UnmanagedType.I4)]
    public Int32 biSize;
    [MarshalAs(UnmanagedType.I4)]
    public Int32 biWidth;
    [MarshalAs(UnmanagedType.I4)]
    public Int32 biHeight;
    [MarshalAs(UnmanagedType.I2)]
    public short biPlanes;
    [MarshalAs(UnmanagedType.I2)]
    public short biBitCount;
    [MarshalAs(UnmanagedType.I4)]
    public Int32 biCompression;
    [MarshalAs(UnmanagedType.I4)]
    public Int32 biSizeImage;
    [MarshalAs(UnmanagedType.I4)]
    public Int32 biXPelsPerMeter;
    [MarshalAs(UnmanagedType.I4)]
    public Int32 biYPelsPerMeter;
    [MarshalAs(UnmanagedType.I4)]
    public Int32 biClrUsed;
    [MarshalAs(UnmanagedType.I4)]
    public Int32 biClrImportant;
    }

    [StructLayout(LayoutKind.Sequential)]
    public struct BITMAPINFO
    {
    [MarshalAs(UnmanagedType.Struct, SizeConst = 40)]
    public BITMAPINFOHEADER bmiHeader;
    [MarshalAs(UnmanagedType.ByValArray, SizeConst = 1024)]
    public Int32[] bmiColors;
    }

    public delegate void FrameEventHandler(IntPtr lwnd, IntPtr lpVHdr);

    // Public methods
    public static object GetStructure(IntPtr ptr, ValueType structure)
    {
    return Marshal.PtrToStructure(ptr, structure.GetType());
    }

    public static object GetStructure(int ptr, ValueType structure)
    {
    return GetStructure(new IntPtr(ptr), structure);
    }

    public static void Copy(IntPtr ptr, byte[] data)
    {
    Marshal.Copy(ptr, data, 0, data.Length);
    }

    public static void Copy(int ptr, byte[] data)
    {
    Copy(new IntPtr(ptr), data);
    }

    public static int SizeOf(object structure)
    {
    return Marshal.SizeOf(structure);
    }

    }
    }
  • 相关阅读:
    maven工程下添加oracle驱动包
    面试题----入参两个Integer,无返回值,然后使这个两个值在调用函数后交换
    使用spring data solr 实现搜索关键字高亮显示
    MyBatisPlus忽略映射字段注解
    Linux下Solr单机版、集群版安装与配置
    AngularJs实现全选功能
    SpringBoot2.0整合mybatis、shiro、redis实现基于数据库权限管理系统
    springboot2.0集成shiro出现ShiroDialect报错找不到AbstractTextChildModifierAttrPr
    linux下ssh远程登录服务器入门操作
    英文邮件寻求帮助的礼貌用语
  • 原文地址:https://www.cnblogs.com/zeroone/p/1711189.html
Copyright © 2020-2023  润新知