zoukankan      html  css  js  c++  java
  • C# 海康DVR客户端开发系列(2)—— 封装API


    前言

      从上篇文章(10月4日)到本篇文章截止到今天(10月22日)一直在做这个SDK翻译工作,耗时2周半,代码超过1万行,约有三分之二的行数是注释。由于工作忙也只能一天抽出那么半个小时一个小时来整理,所以对关注此系列文章的朋友说句:“抱歉,让大家久等了”。

      临时决定本系列使用WPF来做例子(买了一本WPF没读 - - #,所以......),藉此学习下WPF,也进一步熟悉.Net Framework 3.5,落伍的“老兵”奋起追击下相对于“老兵”而言的新技术 :)  

      其实这篇文章在10月22日就写好了,但是想和视频预览文章一起发布,比较麻烦的是我这边朋友的DVR一直不稳定,一直拖延到今天还是不行,所以还是把本文先发了。因此寻求能提供DVR设备的厂家或者提供DVR远程访问地址的朋友,以支持此系列能顺利的完成,在这里先谢谢了!我的联系方式:13811821337、over140@gmail.com



    提醒
      欢迎转载,但请保留博客园(www.cnblogs.com)、农民伯伯(over140.cnblogs.com)的出处,谢谢合作:)


    系列
      1.  C# 海康DVR客户端开发系列(1)——准备
      2.  C# 海康DVR客户端开发系列(2)—— 封装API


    更新

      本文会随着后续实践文章有相应的改动,请及时更新!

      2010-12-21  HCNetSDK2010-12-21.rar

        主要更新了SerialDataCallBack委托的pRecvDataBuffer参数数据类型,由string改为byte[],这里感谢badnewfish实践后指出,欢迎大家积极反馈!

      2009-10-31  HCNetSDK2009-10-31.rar

        主要更新了大部分结构体中byte[]初始大小指定,加上了[MarshalAs(UnmanagedType.ByValArray, SizeConst = HCNetSDK.SERIALNO_LEN)]类似的标记。

      2009-10-24  HCNetSDK.cs

    正文

      一、代码截图

      VS 

      二、 部分代码

      由于代码过长(超过1W行),这里就不贴全部了,大家直接在更新下面下载最新的SDK即可。

            /// 设置码流速度
            
    /// </summary>
            public const int NET_DVR_SETSPEED = 24;
            
    /// <summary>
            
    /// 保持与设备的心跳(如果回调阻塞,建议2秒发送一次)
            
    /// </summary>
            public const int NET_DVR_KEEPALIVE = 25;

            
    //远程按键定义如下:
            /* key value send to CONFIG program */
            
    public const int KEY_CODE_1 = 1;
            
    public const int KEY_CODE_2 = 2;
            
    public const int KEY_CODE_3 = 3;
            
    public const int KEY_CODE_4 = 4;
            
    public const int KEY_CODE_5 = 5;
            
    public const int KEY_CODE_6 = 6;
            
    public const int KEY_CODE_7 = 7;
            
    public const int KEY_CODE_8 = 8;
            
    public const int KEY_CODE_9 = 9;
            
    public const int KEY_CODE_0 = 10;
            
    public const int KEY_CODE_POWER = 11;
            
    public const int KEY_CODE_MENU = 12;
            
    public const int KEY_CODE_ENTER = 13;
            
    public const int KEY_CODE_CANCEL = 14;
            
    public const int KEY_CODE_UP = 15;
            
    public const int KEY_CODE_DOWN = 16;
            
    public const int KEY_CODE_LEFT = 17;
            
    public const int KEY_CODE_RIGHT = 18;
            
    public const int KEY_CODE_EDIT = 19;
            
    public const int KEY_CODE_ADD = 20;
            
    public const int KEY_CODE_MINUS = 21;
            
    public const int KEY_CODE_PLAY = 22;
            
    public const int KEY_CODE_REC = 23;
            
    public const int KEY_CODE_PAN = 24;
            
    public const int KEY_CODE_M = 25;
            
    public const int KEY_CODE_A = 26;
            
    public const int KEY_CODE_F1 = 27;
            
    public const int KEY_CODE_F2 = 28;

            
    /* for PTZ control */
            
    public const int KEY_PTZ_UP_START = KEY_CODE_UP;
            
    public const int KEY_PTZ_UP_STOP = 32;

            
    public const int KEY_PTZ_DOWN_START = KEY_CODE_DOWN;
            
    public const int KEY_PTZ_DOWN_STOP = 33;

            
    public const int KEY_PTZ_LEFT_START = KEY_CODE_LEFT;
            
    public const int KEY_PTZ_LEFT_STOP = 34;

            
    public const int KEY_PTZ_RIGHT_START = KEY_CODE_RIGHT;
            
    public const int KEY_PTZ_RIGHT_STOP = 35;

            
    /// <summary>
            
    /// 光圈+
            
    /// </summary>
            public const int KEY_PTZ_AP1_START = KEY_CODE_EDIT; /* 光圈+ */
            
    public const int KEY_PTZ_AP1_STOP = 36;

            
    /// <summary>
            
    /// 光圈-
            
    /// </summary>
            public const int KEY_PTZ_AP2_START = KEY_CODE_PAN; /* 光圈- */
            
    public const int KEY_PTZ_AP2_STOP = 37;

            
    /// <summary>
            
    /// 聚焦+
            
    /// </summary>
            public const int KEY_PTZ_FOCUS1_START = KEY_CODE_A; /* 聚焦+ */
            
    public const int KEY_PTZ_FOCUS1_STOP = 38;

            
    /// <summary>
            
    /// 聚焦-
            
    /// </summary>
            public const int KEY_PTZ_FOCUS2_START = KEY_CODE_M;/* 聚焦- */
            
    public const int KEY_PTZ_FOCUS2_STOP = 39;

            
    /// <summary>
            
    /// 变倍+
            
    /// </summary>
            public const int KEY_PTZ_B1_START = 40/* 变倍+ */
            
    public const int KEY_PTZ_B1_STOP = 41;

            
    /// <summary>
            
    /// 变倍-
            
    /// </summary>
            public const int KEY_PTZ_B2_START = 42/* 变倍- */
            
    public const int KEY_PTZ_B2_STOP = 43;

            
    //9000新增
            public const int KEY_CODE_11 = 44;
            
    public const int KEY_CODE_12 = 45;
            
    public const int KEY_CODE_13 = 46;
            
    public const int KEY_CODE_14 = 47;
            
    public const int KEY_CODE_15 = 48;
            
    public const int KEY_CODE_16 = 49;

            
    /// <summary>
            
    /// 获取网络应用参数 EMAIL
            
    /// </summary>
            public const int NET_DVR_GET_EMAILCFG = 228;//
            /// <summary>
            
    /// 设置网络应用参数 EMAIL
            
    /// </summary>
            public const int NET_DVR_SET_EMAILCFG = 229;    //
            
    //对应NET_DVR_EMAILCFG结构
            
    //
            public const int NET_DVR_GET_ALLHDCFG = 300;        //
            #region DS9000新增命令(_V30)
            
    //设备编码类型配置(NET_DVR_COMPRESSION_AUDIO结构)
            /// <summary>
            
    /// 获取设备语音对讲编码参数
            
    /// </summary>
            public const int NET_DVR_GET_COMPRESSCFG_AUD = 1058;     //
            /// <summary>
            
    /// 设置设备语音对讲编码参数
            
    /// </summary>
            public const int NET_DVR_SET_COMPRESSCFG_AUD = 1059;      //
            #endregion
            
    /// <summary>
            
    /// 预览异常
            
    /// </summary>
            public const int NET_DVR_REALPLAYEXCEPTION = 111;//
            /// <summary>
            
    /// 预览时连接断开
            
    /// </summary>
            public const int NET_DVR_REALPLAYNETCLOSE = 112;//
            /// <summary>
            
    /// 预览5s没有收到数据
            
    /// </summary>
            public const int NET_DVR_REALPLAY5SNODATA = 113;    //
            /// <summary>
            
    /// 预览重连
            
    /// </summary>
            public const int NET_DVR_REALPLAYRECONNECT = 114;    //
            /// <summary>
            
    /// 回放数据播放完毕
            
    /// </summary>
            public const int NET_DVR_PLAYBACKOVER = 101;//
            /// <summary>
            
    /// 回放异常
            
    /// </summary>
            public const int NET_DVR_PLAYBACKEXCEPTION = 102;//
            /// <summary>
            
    /// 回放时候连接断开
            
    /// </summary>
            public const int NET_DVR_PLAYBACKNETCLOSE = 103;//
            /// <summary>
            
    /// 回放5s没有收到数据
            
    /// </summary>
            public const int NET_DVR_PLAYBACK5SNODATA = 104;

            
    #region DS-6001D/F
            
    /// <summary>
            
    /// DS-6001D Decoder
            
    ///     NET_DVR_DECODERINFO, *LPNET_DVR_DECODERINFO;
            
    /// </summary>
            public struct NET_DVR_DECODERINFO
            {
                
    /// <summary>
                
    /// 解码设备连接的服务器IP
                
    ///     public byte byEncoderIP[16];
                
    /// </summary>
                public byte[] byEncoderIP;
                
    /// <summary>
                
    /// 解码设备连接的服务器的用户名
                
    ///     public byte byEncoderUser[16];
                
    /// </summary>
                public byte[] byEncoderUser;
                
    /// <summary>
                
    /// 解码设备连接的服务器的密码
                
    ///     public byte byEncoderPasswd[16];
                
    /// </summary>
                public byte[] byEncoderPasswd;
                
    /// <summary>
                
    /// 解码设备连接服务器的连接模式
                
    /// </summary>
                public byte bySendMode;
                
    /// <summary>
                
    /// 解码设备连接的服务器的通道号
                
    /// </summary>
                public byte byEncoderChannel;
                
    /// <summary>
                
    /// 解码设备连接的服务器的端口号
                
    /// </summary>
                public ushort wEncoderPort;
                
    /// <summary>
                
    /// 保留
                
    ///     public byte reservedData[4];
                
    /// </summary>
                public byte[] reservedData;
            }

            
    /// <summary>
            
    /// NET_DVR_DECODERSTATE, *LPNET_DVR_DECODERSTATE;
            
    /// </summary>
            public struct NET_DVR_DECODERSTATE
            {
                
    /// <summary>
                
    /// 解码设备连接的服务器IP
                
    ///     public byte byEncoderIP[16];
                
    /// </summary>
                public byte[] byEncoderIP;
                
    /// <summary>
                
    /// 解码设备连接的服务器的用户名
                
    ///     public byte byEncoderUser[16];
                
    /// </summary>
                public byte[] byEncoderUser;
                
    /// <summary>
                
    /// 解码设备连接的服务器的密码
                
    ///     public byte byEncoderPasswd[16];
                
    /// </summary>
                public byte[] byEncoderPasswd;
                
    /// <summary>
                
    /// 解码设备连接的服务器的通道号
                
    /// </summary>
                public byte byEncoderChannel;
                
    /// <summary>
                
    /// 解码设备连接的服务器的连接模式
                
    /// </summary>
                public byte bySendMode;
                
    /// <summary>
                
    /// 解码设备连接的服务器的端口号
                
    /// </summary>
                public ushort wEncoderPort;
                
    /// <summary>
                
    /// 解码设备连接服务器的状态
                
    /// </summary>
                public uint dwConnectState;
                
    /// <summary>
                
    /// 保留
                
    ///     public byte reservedData[4];
                
    /// </summary>
                public byte[] reservedData;
            }

            
    #region 解码设备控制码定义
            
    public const int NET_DEC_STARTDEC = 1;
            
    public const int NET_DEC_STOPDEC = 2;
            
    public const int NET_DEC_STOPCYCLE = 3;
            
    public const int NET_DEC_CONTINUECYCLE = 4;
            
    #endregion


            
    #endregion

            
    /// <summary>
            
    /// Email
            
    ///     NET_DVR_EMAILPARA, *LPNET_DVR_EMAILPARA;
            
    /// </summary>
            public struct NET_DVR_EMAILPARA
            {
                
    /// <summary>
                
    /// 邮件账号
                
    ///     public byte sUsername[64];
                
    /// </summary>
                public string sUsername;
                
    /// <summary>
                
    /// 邮件密码
                
    ///     public byte sPassword[64];
                
    /// </summary>
                public string sPassword;
                
    /// <summary>
                
    ///     public byte sSmtpServer[64];
                
    /// </summary>
                public string sSmtpServer;
                
    /// <summary>
                
    ///     public byte sPop3Server[64];
                
    /// </summary>
                public string sPop3Server;
                
    /// <summary>
                
    /// 邮件地址
                
    ///     public byte sMailAddr[64];
                
    /// </summary>
                public string sMailAddr;
                
    /// <summary>
                
    /// 上传报警/异常等的email
                
    ///     public byte sEventMailAddr1[64];
                
    /// </summary>
                public byte[] sEventMailAddr1;
                
    /// <summary>
                
    ///     public byte sEventMailAddr2[64];
                
    /// </summary>
                public byte[] sEventMailAddr2;
                
    /// <summary>
                
    ///     public byte res[16];
                
    /// </summary>
                public byte[] res;
            }

            
    /// <summary>
            
    /// NET_DVR_NETCFG_OTHER, *LPNET_DVR_NETCFG_OTHER;
            
    /// </summary>
            public struct NET_DVR_NETCFG_OTHER
            {
                
    public uint dwSize;
                
    /// <summary>
                
    ///     char    sFirstDNSIP[16];
                
    /// </summary>
                public string sFirstDNSIP;
                
    /// <summary>
                
    ///     char    sSecondDNSIP[16];
                
    /// </summary>
                public string sSecondDNSIP;
                
    /// <summary>
                
    /// char    sRes[32];
                
    /// </summary>
                public string sRes;
            }

            
    /// <summary>
            
    /// 连接的通道配置 2007-11-05
            
    ///     NET_DVR_MATRIX_DECCHANINFO, *LPNET_DVR_MATRIX_DECCHANINFO;
            
    /// </summary>
            public struct NET_DVR_MATRIX_DECCHANINFO
            {
                
    /// <summary>
                
    /// 是否启用 0-否 1-启用
                
    /// </summary>
                public uint dwEnable;
                
    /// <summary>
                
    /// 轮循解码通道信息
                
    /// </summary>
                public NET_DVR_MATRIX_DECINFO struDecChanInfo;
            }
            
    /// <summary>
            
    /// 压缩参数?
            
    ///     NET_DVR_COMPRESSIONCFG_NEW, *LPNET_DVR_COMPRESSIONCFG_NEW;
            
    /// </summary>
            public struct NET_DVR_COMPRESSIONCFG_NEW
            {
                
    public uint dwSize;
                
    /// <summary>
                
    /// 定时录像
                
    /// </summary>
                public NET_DVR_COMPRESSION_INFO_EX struLowCompression;
                
    /// <summary>
                
    /// 事件触发录像
                
    /// </summary>
                public NET_DVR_COMPRESSION_INFO_EX struEventCompression;
            }
            
    /// <summary>
            
    /// 抓图模式
            
    /// </summary>
            public enum CAPTURE_MODE
            {
                
    /// <summary>
                
    /// BMP模式
                
    /// </summary>
                BMP_MODE = 0,        //
                /// <summary>
                
    /// JPEG模式 
                
    /// </summary>
                JPEG_MODE = 1        //
            }
            
    /// <summary>
            
    /// 实时声音模式
            
    /// </summary>
            public enum REALSOUND_MODE
            {
                
    /// <summary>
                
    /// 独占模式
                
    /// </summary>
                MONOPOLIZE_MODE = 1,
                
    /// <summary>
                
    /// 共享模式
                
    /// </summary>
                SHARE_MODE = 2
            }
            
    /// <summary>
            
    /// 录象文件参数(带卡号)
            
    ///     NET_DVR_FINDDATA_CARD, *LPNET_DVR_FINDDATA_CARD;
            
    /// </summary>
            public struct NET_DVR_FINDDATA_CARD
            {
                
    /// <summary>
                
    /// 文件名
                
    ///     char sFileName[100];
                
    /// </summary>
                public string sFileName;
                
    /// <summary>
                
    /// 文件的开始时间
                
    /// </summary>
                public NET_DVR_TIME struStartTime;
                
    /// <summary>
                
    /// 文件的结束时间
                
    /// </summary>
                public NET_DVR_TIME struStopTime;
                
    /// <summary>
                
    /// 文件的大小
                
    /// </summary>
                public uint dwFileSize;
                
    /// <summary>
                
    /// 卡号?
                
    ///     char sCardNum[32];
                
    /// </summary>
                public char sCardNum;
            }

            
    /// <summary>
            
    /// 设置重新连接间隔
            
    ///     NET_DVR_API BOOL __stdcall NET_DVR_SetReconnect(DWORD dwInterval = 30000, BOOL bEnableRecon = TRUE);
            
    /// </summary>
            
    /// <param name="dwInterval"></param>
            
    /// <param name="bEnableRecon"></param>
            
    /// <returns></returns>
            [DllImport("HCNetSDK.dll")]
            
    public static extern bool NET_DVR_SetReconnect(uint dwInterval, bool bEnableRecon);
            
    /// <summary>
            
    /// 通过IPSever获取设备动态IP地址[Ex]
            
    ///     NET_DVR_API BOOL  __stdcall NET_DVR_GetDVRIPByResolveSvr_EX(char *sServerIP, WORD wServerPort, unsigned char *sDVRName, WORD wDVRNameLen, BYTE *sDVRSerialNumber, WORD wDVRSerialLen, char* sGetIP, DWORD *dwPort);
            
    /// </summary>
            
    /// <param name="sServerIP"></param>
            
    /// <param name="wServerPort"></param>
            
    /// <param name="sDVRName"></param>
            
    /// <param name="wDVRNameLen"></param>
            
    /// <param name="sDVRSerialNumber"></param>
            
    /// <param name="wDVRSerialLen"></param>
            
    /// <param name="sGetIP"></param>
            
    /// <param name="dwPort"></param>
            
    /// <returns></returns>
            [DllImport("HCNetSDK.dll")]
            
    public static extern bool NET_DVR_GetDVRIPByResolveSvr_EX(string sServerIP, ushort wServerPort, string sDVRName, ushort wDVRNameLen, string sDVRSerialNumber, ushort wDVRSerialLen, StringBuilder sGetIP, ref uint dwPort);
            
    /// <summary>
            
    ///     NET_DVR_API BOOL __stdcall NET_DVR_PTZControlWithSpeed_EX(LONG lRealHandle, DWORD dwPTZCommand, DWORD dwStop, DWORD dwSpeed);
            
    /// </summary>
            
    /// <param name="lRealHandle"></param>
            
    /// <param name="dwPTZCommand"></param>
            
    /// <param name="dwStop"></param>
            
    /// <param name="dwSpeed"></param>
            
    /// <returns></returns>
            [DllImport("HCNetSDK.dll")]
            
    public static extern bool NET_DVR_PTZControlWithSpeed_EX(int lRealHandle, uint dwPTZCommand, uint dwStop, uint dwSpeed);
            
    /// <summary>
            
    ///     NET_DVR_API BOOL __stdcall NET_DVR_PTZMltTrack(LONG lRealHandle,DWORD dwPTZTrackCmd, DWORD dwTrackIndex);
            
    /// </summary>
            
    /// <param name="lRealHandle"></param>
            
    /// <param name="dwPTZTrackCmd"></param>
            
    /// <param name="dwTrackIndex"></param>
            
    /// <returns></returns>
            [DllImport("HCNetSDK.dll")]
            
    public static extern bool NET_DVR_PTZMltTrack(int lRealHandle, uint dwPTZTrackCmd, uint dwTrackIndex);
            
    /// <summary>
            
    ///     NET_DVR_API BOOL __stdcall NET_DVR_PTZMltTrack_Other(LONG lUserID,LONG lChannel,DWORD dwPTZTrackCmd, DWORD dwTrackIndex);
            
    /// </summary>
            
    /// <param name="lUserID"></param>
            
    /// <param name="lChannel"></param>
            
    /// <param name="dwPTZTrackCmd"></param>
            
    /// <param name="dwTrackIndex"></param>
            
    /// <returns></returns>
            [DllImport("HCNetSDK.dll")]
            
    public static extern bool NET_DVR_PTZMltTrack_Other(int lUserID, int lChannel, uint dwPTZTrackCmd, uint dwTrackIndex);
            
    /// <summary>
            
    ///     NET_DVR_API BOOL __stdcall NET_DVR_PTZMltTrack_EX(LONG lRealHandle,DWORD dwPTZTrackCmd, DWORD dwTrackIndex);
            
    /// </summary>
            
    /// <param name="lRealHandle"></param>
            
    /// <param name="dwPTZTrackCmd"></param>
            
    /// <param name="dwTrackIndex"></param>
            
    /// <returns></returns>
            [DllImport("HCNetSDK.dll")]
            
    public static extern bool NET_DVR_PTZMltTrack_EX(int lRealHandle, uint dwPTZTrackCmd, uint dwTrackIndex);
            
    /// <summary>
            
    /// NET_DVR_API LONG __stdcall NET_DVR_FindNextFile_Card(LONG lFindHandle, LPNET_DVR_FINDDATA_CARD lpFindData);
            
    /// </summary>
            
    /// <param name="lFindHandle"></param>
            
    /// <param name="lpFindData"></param>
            
    /// <returns></returns>
            [DllImport("HCNetSDK.dll")]
            
    public static extern int NET_DVR_FindNextFile_Card(int lFindHandle, NET_DVR_FINDDATA_CARD lpFindData);
            
    /// <summary>
            
    /// NET_DVR_API LONG __stdcall NET_DVR_FindFile_Card(LONG lUserID, LONG lChannel, DWORD dwFileType, LPNET_DVR_TIME lpStartTime, LPNET_DVR_TIME lpStopTime);
            
    /// </summary>
            
    /// <param name="lUserID"></param>
            
    /// <param name="lChannel"></param>
            
    /// <param name="dwFileType"></param>
            
    /// <param name="lpStartTime"></param>
            
    /// <param name="lpStopTime"></param>
            
    /// <returns></returns>
            [DllImport("HCNetSDK.dll")]
            
    public static extern int NET_DVR_FindFile_Card(int lUserID, int lChannel, uint dwFileType, NET_DVR_TIME lpStartTime, NET_DVR_TIME lpStopTime);
            
    /// <summary>
            
    /// NET_DVR_API int    __stdcall NET_DVR_GetPlayBackPos(LONG lPlayHandle);
            
    /// </summary>
            
    /// <param name="lPlayHandle"></param>
            
    /// <returns></returns>
            [DllImport("HCNetSDK.dll")]
            
    public static extern int NET_DVR_GetPlayBackPos(int lPlayHandle);
            
    //解码设备DS-6001D/DS-6001F
            /// <summary>
            
    /// NET_DVR_API BOOL __stdcall NET_DVR_StartDecode(LONG lUserID, LONG lChannel, LPNET_DVR_DECODERINFO lpDecoderinfo);
            
    /// </summary>
            
    /// <param name="lUserID"></param>
            
    /// <param name="lChannel"></param>
            
    /// <param name="lpDecoderinfo"></param>
            
    /// <returns></returns>
            [DllImport("HCNetSDK.dll")]
            
    public static extern bool NET_DVR_StartDecode(int lUserID, int lChannel, NET_DVR_DECODERINFO lpDecoderinfo);
            
    /// <summary>
            
    /// NET_DVR_API BOOL __stdcall NET_DVR_StopDecode(LONG lUserID, LONG lChannel);
            
    /// </summary>
            
    /// <param name="lUserID"></param>
            
    /// <param name="lChannel"></param>
            
    /// <returns></returns>
            [DllImport("HCNetSDK.dll")]
            
    public static extern bool NET_DVR_StopDecode(int lUserID, int lChannel);
            
    /// <summary>
            
    /// NET_DVR_API BOOL __stdcall NET_DVR_GetDecoderState(LONG lUserID, LONG lChannel, LPNET_DVR_DECODERSTATE lpDecoderState);
            
    /// </summary>
            
    /// <param name="lUserID"></param>
            
    /// <param name="lChannel"></param>
            
    /// <param name="lpDecoderState"></param>
            
    /// <returns></returns>
            [DllImport("HCNetSDK.dll")]
            
    public static extern bool NET_DVR_GetDecoderState(int lUserID, int lChannel, NET_DVR_DECODERSTATE lpDecoderState);
            
    /// <summary>
            
    /// 保存参数
            
    ///     NET_DVR_API BOOL __stdcall NET_DVR_SaveConfig(LONG lUserID);
            
    /// </summary>
            
    /// <param name="lUserID"></param>
            
    /// <returns></returns>
            [DllImport("HCNetSDK.dll")]
            
    public static extern bool NET_DVR_SaveConfig(int lUserID);
            
    /// <summary>
            
    ///     NET_DVR_API BOOL __stdcall NET_DVR_SetVideoEffect(LONG lUserID, LONG lChannel, DWORD dwBrightValue, DWORD dwContrastValue, DWORD dwSaturationValue, DWORD dwHueValue);
            
    /// </summary>
            
    /// <param name="lUserID"></param>
            
    /// <param name="lChannel"></param>
            
    /// <param name="dwBrightValue"></param>
            
    /// <param name="dwContrastValue"></param>
            
    /// <param name="dwSaturationValue"></param>
            
    /// <param name="dwHueValue"></param>
            
    /// <returns></returns>
            [DllImport("HCNetSDK.dll")]
            
    public static extern bool NET_DVR_SetVideoEffect(int lUserID, int lChannel, uint dwBrightValue, uint dwContrastValue, uint dwSaturationValue, uint dwHueValue);
            
    /// <summary>
            
    ///     NET_DVR_API BOOL __stdcall NET_DVR_GetVideoEffect(LONG lUserID, LONG lChannel, DWORD *pBrightValue, DWORD *pContrastValue, DWORD *pSaturationValue, DWORD *pHueValue);
            
    /// </summary>
            
    /// <param name="lUserID"></param>
            
    /// <param name="lChannel"></param>
            
    /// <param name="pBrightValue"></param>
            
    /// <param name="pContrastValue"></param>
            
    /// <param name="pSaturationValue"></param>
            
    /// <param name="pHueValue"></param>
            
    /// <returns></returns>
            [DllImport("HCNetSDK.dll")]
            
    public static extern bool NET_DVR_GetVideoEffect(int lUserID, int lChannel, out uint pBrightValue, out uint pContrastValue, out uint pSaturationValue, out uint pHueValue);
      三、下章预告
        实现最基本的连接服务器并预览图像的功能。


    结束语
      首先我必须强调本章的翻译是一个体力活!本章可能会再随后的文章不断的更新,主要是数据类型对应可能有问题,这里也是凭经验来进行对应了,也欢迎有朋友尽早的向我提交勘误,我好及时的更新文章。
  • 相关阅读:
    Python编码和文件操作
    Python的list和tuple及dictionary
    Python代码对比
    python的基础知识
    day2 springcloud组件(nacos注册/配置中心 feign组件请求调用 gateway网关)
    springcloud与springboot版本对应关系
    git配置
    day1 分布式基础概念
    spring中的依赖注入(DI)笔记
    20210223 爱生气的书店老板(滑动窗口)
  • 原文地址:https://www.cnblogs.com/over140/p/1577975.html
Copyright © 2011-2022 走看看