C# 视频监控系列(15):总结贴——可能用到的C# WinForm技术小结

简介:

前言

     本章主要把可能用到的C# WinForm 功能性代码在这里汇总一下,以备实现其他功能来满足客户的其他需求,或者方便自己开发。

 

注意

     本系列文章限于学习交流,注重过程,由于涉及公司,所以不提供源代码下载,非常抱歉!!但是请大家放心,核心、实现以及其他能够贴出来的代码我都会贴出来,并且争取尽所能的回答留言里的每一个问题,感谢大家关注,欢迎交流 :)

 

系列

     1.     C# 视频监控系列(1):准备

     2.     C# 视频监控系列(2):客户端——封装API

     3.     C# 视频监控系列(3):客户端——连接服务器

     4.     C# 视频监控系列(4):客户端——音频接收和抓图

     5.     C# 视频监控系列(5):客户端——给服务器端发送字符串和录像(数据捕获)

     6.     C# 视频监控系列(6):服务器端——封装API(上) [HikServer.dll]

     7.     C# 视频监控系列(7):服务器端——封装API(下) [DS40xxSDK.dll]

     8.     C# 视频监控系列(8):服务器端——预览和可被客户端连接

     9.     C# 视频监控系列(9):服务器端——数据捕获(抓图 + 录像)

     10.     C# 视频监控系列(10):服务器端——验证、设置画面质量、字幕叠加、板卡序列号

     11.     C# 视频监控系列(11):H264播放器——封装API[HikPlayM4.dll]

     12.     C# 视频监控系列(12):H264播放器——播放录像文件

     13.     C# 视频监控系列(13):H264播放器——控制播放和截图 

     14.     C# 视频监控系列(14):总结贴——VC++代码转成C#小结 

     15.     C# 视频监控系列(15):总结贴——可能用到的C# WinForm技术小结 

 

正文

     1.     IntPtr转换成byte[]

         public   byte [] ConvertToBytes(IntPtr dataBuf,  int  length)
        {
            
byte [] byteBuf  =   new   byte [length];
            Marshal.Copy(dataBuf, byteBuf, 
0 , length);
            
return  byteBuf;
        }

     2.     读写INI文件

          一般用于读写配置文件

复制代码
     ///   <summary>
    
///  读写INI文件
    
///   </summary>
     public   class  IniFile
    {
        
///   <summary>
        
///  文件INI名称
        
///   </summary>
         public   string  Path;

        
///   <summary>
        
///  声明读写INI文件的API函数 
        
///   </summary>
        
///   <param name="section"></param>
        
///   <param name="key"></param>
        
///   <param name="val"></param>
        
///   <param name="filePath"></param>
        
///   <returns></returns>
        [DllImport( " kernel32 " )]
        
private   static   extern   long  WritePrivateProfileString( string  section,  string  key,  string  val,  string  filePath);


        [DllImport(
" kernel32 " )]
        
private   static   extern   int  GetPrivateProfileString( string  section,  string  key,  string  def, StringBuilder retVal,  int  size,  string  filePath);

        
///   <summary>
        
///  类的构造函数,传递INI文件名
        
///   </summary>
        
///   <param name="inipath"></param>
         public  IniFile( string  inipath)
        {
            
//
            
//  TODO: Add constructor logic here
            
//
            Path  =  inipath;
        }

        
///   <summary>
        
///  写INI文件
        
///   </summary>
        
///   <param name="Section"></param>
        
///   <param name="Key"></param>
        
///   <param name="Value"></param>
         public   void  IniWriteValue( string  Section,  string  Key,  string  Value)
        {
            WritePrivateProfileString(Section, Key, Value, 
this .Path);

        }

        
///   <summary>
        
///  读取INI文件指定
        
///   </summary>
        
///   <param name="Section"></param>
        
///   <param name="Key"></param>
        
///   <returns></returns>
         public   string  IniReadValue( string  Section,  string  Key)
        {
            StringBuilder temp 
=   new  StringBuilder( 5000 );
            
int  i  =  GetPrivateProfileString(Section, Key,  "" , temp,  5000 this .Path);
            
return  temp.ToString();

        }
    }
复制代码

     3.     获取网卡号

          可用于软件加密

复制代码
         ///   <summary>
        
///  获得网卡号
        
///   </summary>
        
///   <returns></returns>
         public   static   string  GetNetCardMacAddress()
        {
            ManagementClass mc 
=   new  ManagementClass( " Win32_NetworkAdapterConfiguration " );
            ManagementObjectCollection moc 
=  mc.GetInstances();
            
string  str  =   "" ;
            
foreach  (ManagementObject mo  in  moc)
            {
                
if  (( bool )mo[ " IPEnabled " ==   true )
                    str 
=  mo[ " MacAddress " ].ToString();
            }
            
return  str;
        }
复制代码

     4.     获取采集卡序列化

          可用于软件加密绑定,注意结构体DS_BOARD_DETAIL.sn是16位的,但是实际只有12位,VC++源码也只取了12位,后门都是0。

复制代码
         ///   <summary>
        
///  获取板卡序号
        
///   </summary>
        
///   <returns></returns>
         public   static   string  GetBoardSN()
        {
            
uint  boardCount  =  HikVisionSDK.GetBoardCount();
            StringBuilder sn 
=   new  StringBuilder();
            
for  ( uint  i  =   0 ; i  <  boardCount; )
            {
                DS_BOARD_DETAIL boardDetail 
=   new  DS_BOARD_DETAIL();
                HikVisionSDK.GetBoardDetail(i, 
ref  boardDetail);
                
for  ( int  j  =   0 ; j  <   12 ; j ++ )
                {
                    sn.Append((
char )(boardDetail.sn[j]  +   0x30 ));
                }
                
break ;
            }
            
return  sn.ToString();
        }
复制代码

     5.     全屏显示视频窗口

复制代码
        ///   <summary>
        
///  全屏
        
///   </summary>
        
///   <param name="tsmFullScreen"> 右键 </param>
        
///   <param name="pVideo"> 显示视频的窗口 </param>
        
///   <param name="cs"> 视频连接成功返回的值 </param>
         private   void  FullScreen(ToolStripMenuItem tsmFullScreen, Panel pVideo,  int  cs)
        {
            
if  ( this .WindowState  ==  System.Windows.Forms.FormWindowState.Maximized)
            {
                tsmFullScreen.Text 
=   " 全屏窗口 " ;
                
this .FormBorderStyle  =  System.Windows.Forms.FormBorderStyle.FixedSingle;
                
this .WindowState  =  System.Windows.Forms.FormWindowState.Normal;
                
this .TopMost  =   false ;
                pVideo.Width 
=  pre_Width;
                pVideo.Height 
=  pre_Height;
                pVideo.Top 
=  pre_Top;
                pVideo.Left 
=  pre_Left;

                
// 隐藏其他控件
                HideOtherControls(pVideo,  true );

                minPanel(pVideo, cs);
            }
            
else
            {
                tsmFullScreen.Text 
=   " 关闭全屏 " ;
                
this .FormBorderStyle  =  System.Windows.Forms.FormBorderStyle.None;
                
this .WindowState  =  System.Windows.Forms.FormWindowState.Maximized;
                
this .TopMost  =   true ;

                pre_Width 
=  pVideo.Width;
                pre_Height 
=  pVideo.Height;
                pre_Top 
=  pVideo.Top;
                pre_Left 
=  pVideo.Left;

                pVideo.Width 
=   this .Width;
                pVideo.Height 
=   this .Height;
                pVideo.Top 
=   0 ;
                pVideo.Left 
=   0 ;

                
// 显示其他控件
                HideOtherControls(pVideo,  false );
            }
        }
复制代码

     6.     其他代码

复制代码
         // 判断是不是IP地址
         public   bool  IsIPAddress( string  ip)
        {
            
return  Regex.IsMatch(ip,  @" ^((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)$ " );
        }
        
///   <summary>
        
///  是否是无符号整数(正数)
        
///   </summary>
        
///   <param name="value"></param>
        
///   <returns></returns>
         public   bool  IsUInt( string  value)
        {
            
return  Regex.IsMatch(value,  @" ^\d*$ " );
        }
复制代码

 

结束

     实际开发中远不只这么多,基本上也是有一个这样的功能需求就去GOOGLE一段代码出来,还有其他如delegate和event在窗体之间使用,分屏也是简单的采用了4个Panel,当放大时就分别隐藏其他Panel等等,就不一一列举了,多查查资料就行了: )       


转载:http://www.cnblogs.com/over140/archive/2009/04/04/1429298.html

目录
相关文章
|
10天前
|
Web App开发 Linux C#
C# 网页截图全攻略:三种技术与 Chrome 路径查找指南
本文主要介绍了在 C# 中实现网页截图的几种技术及相关要点。涵盖了 PuppeteerSharp、Selenium 和 HtmlToImage 三种方式,分别阐述了它们的安装步骤及核心代码。同时,针对在 C# 中寻找 Windows 上 chrome.exe 路径这一问题,分析了未安装 Google Chrome 和已安装两种情况下的查找原因,并给出了相关参考链接,还列举了一系列与 C# 使用 Selenium、获取 chrome.exe 路径以及在 Linux 上部署相关的参考资料。
37 11
|
26天前
|
存储 人工智能 监控
AI视频监控技术在公租房管理中的应用:提升监管精准度与效率
该AI视频监控系统具备1080P高清与夜视能力,采用深度学习技术实现高精度人脸识别(误识率1%),并支持实时预警功能,响应时间小于5秒。系统支持私有化部署,保障数据隐私安全,适用于大规模公租房社区管理,可容纳10万以上人脸库。基于开源架构和Docker镜像,一键部署简单快捷,确保24小时稳定运行,并提供详细的后台数据分析报表,助力政府决策。
|
2月前
|
Linux C# iOS开发
开源GTKSystem.Windows.Forms框架让C# Winform支持跨平台运行
开源GTKSystem.Windows.Forms框架让C# Winform支持跨平台运行
59 12
|
2月前
|
开发框架 算法 .NET
C#/.NET/.NET Core技术前沿周刊 | 第 15 期(2024年11.25-11.30)
C#/.NET/.NET Core技术前沿周刊 | 第 15 期(2024年11.25-11.30)
|
2月前
|
开发框架 Cloud Native .NET
C#/.NET/.NET Core技术前沿周刊 | 第 16 期(2024年12.01-12.08)
C#/.NET/.NET Core技术前沿周刊 | 第 16 期(2024年12.01-12.08)
|
2月前
|
机器学习/深度学习 传感器 人工智能
AI视频监控系统在养老院中的技术实现
AI视频监控系统在养老院的应用,结合了计算机视觉、深度学习和传感器融合技术,实现了对老人体征、摔倒和异常行为的实时监控与分析。系统通过高清摄像头和算法模型,能够准确识别老人的动作和健康状况,并及时向护理人员发出警报,提高护理质量和安全性。
119 14
|
2月前
|
程序员 C# 数据库
C# 比较对象新思路,利用反射技术打造更灵活的比较工具
中途接手的项目,碰到需要在更新对象信息时比较并记录差异的需求,最变态的还有附加要求,怎么办?有没有既能满足需求又能对项目影响最小的方法呢?分享这个我封装的方法,一个利用反射技术打造的更灵活的比较工具
|
2月前
|
传感器 机器学习/深度学习 人工智能
AI视频监控卫士技术介绍:智能化河道管理解决方案
AI视频监控卫士系统,通过高清摄像头、智能传感器和深度学习技术,实现河道、水库、城市水务及生态保护区的全天候、全覆盖智能监控。系统能够自动识别非法行为、水质变化和异常情况,并实时生成警报,提升管理效率和精准度。
142 13
|
2月前
|
机器学习/深度学习 传感器 人工智能
开源AI视频监控系统在监狱安全中的应用——实时情绪与行为分析、暴力预警技术详解
针对监狱环境中囚犯情绪波动和复杂人际互动带来的监控挑战,传统CCTV系统难以有效预警暴力事件。AI视频监控系统基于深度学习与计算机视觉技术,实现对行为、情绪的实时分析,尤其在低光环境下表现优异。该系统通过多设备协同、数据同步及自适应训练,确保高精度识别(95%以上)、快速响应(&lt;5秒),并具备24小时不间断运行能力,极大提升了监狱安全管理的效率与准确性。
|
2月前
|
机器学习/深度学习 人工智能 监控
AI视频监控技术的核心优势与实践
AI视频监控技术结合了计算机视觉、深度学习和大数据分析,能够实时分析监控画面,识别异常行为和场景变化。其核心在于从“被动记录”转型为“主动识别”,提升监控效率并减少安全隐患。主要应用场景包括泳池管理、健身器械区域、人员密度预警和异常事件检测。系统架构支持多种摄像头设备,采用边缘计算和Docker部署,具备实时性、高准确率和扩展性等优势。未来将优化复杂场景适应性和实时计算负载,进一步提高系统性能。

热门文章

最新文章