C#使用OpenCV剪切图片中的人物头像
前言
本文主要介绍如何使用OpenCV剪切图形中的人物头像。
准备工作
首先创建一个Wpf项目——OpenCV_Face_Wpf,这里版本使用Framework4.7.2。
然后使用Nuget搜索【Emgu.CV】,如下图。
这里的Emgu.CV选择4.3.0.3890版本,然后安装Emgu.CV和Emgu.CV.runtime.windows。
然后下载所需文件haarcascade_frontalface_default.xml ...
C#/.NET/.NET Core推荐学习书籍(升职加薪,你值得拥有)
前言
作为一名程序员,我们无时无刻都要考虑着如何通过不断地学习来提升自己的核心竞争力。古人有云:“书中自有黄金屋,书中只有颜如玉”,说明了书籍的重要性,没错工作多年来,发现身边那些优秀的同事、大佬都是喜欢看书,看文章,热爱专研和折腾的人。因此,我们想要升职加薪,提升自己的竞争力需要我们在业余生活 ...
C#规则引擎RulesEngine
当编写应用程序时,经常性需要花费大量的时间与精力处理业务逻辑,往往业务逻辑的变化需要重构或者增加大量代码,对开发测试人员很不友好。
之前在这篇文章说过,可以使用脚本引擎来将我们需要经常变化的代码进行动态编译执行,自由度非常大,不过对应的需要资源也多。如果只是针对非常具体业务逻辑的变化,可以尝试使用Rul ...
C# 中的动态类型
翻译自 Camilo Reyes 2018年10月15日的文章 《Working with the Dynamic Type in C#》 [1]
.NET 4 中引入了动态类型。动态对象使您可以处理诸如 JSON 文档之类的结构,这些结构的组成可能要到运行时才能知道。在本文中,Camilo Reyes 解释了如何使用动态类型。
.NET 4.0 中引入的 dynamic 关键字为 C# 编程带来了一个范式 ...
理解C#中的 async await
前言
一个老掉牙的话题,园子里的相关优秀文章已经有很多了,我写这篇文章完全是想以自己的思维方式来谈一谈自己的理解。(PS:文中涉及到了大量反编译源码,需要静下心来细细品味)
从简单开始
为了更容易理解这个问题,我们举一个简单的例子:用异步的方式在控制台上分两步输出“Hello World!”,我这边使用的是Framework ...
C# 合并和拆分PDF文件
一、合并和拆分PDF文件的方式
PDF文件使用了工业标准的压缩算法,易于传输与储存。它还是页独立的,一个PDF文件包含一个或多个“页“,可以单独处理各页,特别适合多处理器系统的工作。PDF文件结构主要可以分为四个部分:首部、文件体、交叉引用表、尾部。PDF操作类库非常多,如下图所示,常用的类库有:Spire.Pdf、iTextSh ...
C# 中的 null 包容运算符 “!” —— 概念、由来、用法和注意事项
在 2020 年的最后一天,博客园发起了一个开源项目:基于 .NET 的博客引擎 fluss,我抽空把源码下载下来看了下,发现在属性的定义中,有很多地方都用到了 null!,如下图所示:
这是什么用法呢?之前没有在项目中用过,所以得空就研究了一下。
以前,! 运算符用来表示 “否”,比如不等于 !=。在 C# 8.0 以后,! 运算符有了 ...
C#实现 Server-sent Events
基于http协议交互的推送方法大概方法如下:
轮询(ajax),比较耗费服务器资源。COMET方式(COMET 技术并不是 HTML 5 )
websocket 双向数据推送,灵活,功能强大
Server-sent-event(简称SSE),单项数据推送(Server-sent Events 规范是 HTML 5 规范的一个组成部分)
这里我们研究一下SSE;
一、什么是SSE
Server-sent Ev ...
C# 9 新特性 —— 补充篇
C# 9 新特性 —— 补充篇
Intro
前面我们分别介绍了一些 C# 9 中的新特性,还有一些我觉得需要了解一下的新特性,写一篇作为补充。
Top-Level Statements
在以往的代码里,一个应用程序必须要有 Main 方法才能运行,从 C# 9 开始,支持没有 Main 方法的程序,实际编译之后还是会有一个 Main 方法的,使用示例如下:
using s ...
C# 9 新特性 —— 增强的 foreach
C# 9 新特性 —— 增强的 foreach
Intro
在 C# 9 中增强了 foreach 的使用,使得一切对象都有 foreach 的可能
我们来看一段代码,这里我们试图遍历一个 int 类型的值
思考一下,我们可以怎么做使得上面的代码编译通过呢?
迭代器模式
迭代器模式,提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露该对象的内部表 ...
C#脚本引擎CS-Script
最近想要在程序中嵌入一个C#脚本引擎,在.NET Framework时代用过一个叫做CS-Script的东西,感觉还是不错,发现现在也支持.NET Core了,试着嵌入一下。
比较
要说能够运行C#脚本的解决方案,有Roslyn和Mono,与他们相比,CS-Script能够提供的封装更为高级,它底层是通过Roslyn之类的引擎运行的,在此基础上,提供了一些额外 ...
[C#] (原创)进度等待窗口(附:自定义控件的使用)
一、前言
技术没有先进与落后,只有合适与不合适。
在程序当中,经常有耗时较长的操作,为了给用户更好的体验,就需要给用户一个及时的反馈,这种时候就需要用到进度等待窗口。
实现进度等待窗口的技术有很多,比如:BackgroundWorker、Thread等。
不过技术不是难点,难点在于怎么使等待窗口美观实用。所以本文中就基于前几 ...
深入解析 C# 的 String.Create 方法
作者:Casey McQuillan
译者:精致码农
原文:http://dwz.win/YVW
说明:原文比较长,翻译时精简了很多内容,对于不重要的细枝末节只用了一句话概括,但不并影响阅读。
你还记得上一次一个无足轻重的细节点燃你思考火花的时刻吗?作为一个软件工程师,我习惯于专注于一个从未见过的微小细节。那一时刻,我大脑的齿轮会开 ...
C# 9.0新特性详解系列之五:记录(record)和with表达式
1 背景与动机
传统面向对象编程的核心思想是一个对象有着唯一标识,表现为对象引用,封装着随时可变的属性状态,如果你改变了一个属性的状态,这个对象还是原来那个对象,就是对象引用没有因为状态的改变而改变,也就是说该对象可以有很多种状态。C#从最初开始也是一直这样设计和工作的。但是一些时候,你可能非常需要一种 ...
C#使用ML.Net完成人工智能预测
前言
Visual Studio2019 Preview中提供了图形界面的ML.Net,所以,只要我们安装Visual Studio2019 Preview就能简单的使用ML.Net了,因为我的电脑已经安装了Visual Studio2019,所以我不需要重头安装Visual Studio2019 Preview,只要更新即可。
安装
首先找到Visual Studio Installer安装包,如下图。
运行,然后选择如下: ...
C#实现SM4国密加密
本文主要讲解“国密加密算法”SM系列之SM4的C#实现方法,加密规则请详阅国密局发布的文档。
首先需第三方Nuget包:Portable.BouncyCastle (源码来自http://www.bouncycastle.org/csharp/)
1.1 SM4主类
/// <summary>
///
/// </summary>
internal class SM4
{
/// <summary>
/// ...
关于C# Span的一些实践
Span这个东西出来很久了,居然因为5.0又火起来了。
相关知识
在大多数情况下,C#开发时,我们只使用托管内存。而实际上,C#为我们提供了三种类型的内存:
堆栈内存 - 最快速的内存,能够做到极快的分配和释放。堆栈内存使用时,需要用stackalloc进行分配。堆栈的一个特点是空间非常小(通常小于1 MB),适合CPU缓存 ...
C#推流RTMP,摄像头、麦克风、桌面、声卡(附源码)
这段时间一直都在研究推流的技术,经过断断续续将近两个月的摸索实践,终于能稳定地推流了。
这个demo的主要功能就是将采集到的摄像头或桌面的视频、以及麦克风或声卡的音频数据推到Nginx-RTMP服务器上,再由Web浏览器去拉流并播放。
接下来介绍Demo整个功能的实现原理和代码逻辑,大家 ...
C# 中的本地函数
目录引入本地函数的原因本地函数是什么本地函数与 Lambda 表达式的比较命名参数和返回值类型明确赋值变量捕获内存分配范型和迭代器本地函数与异常总结
今天我们来聊一聊 C# 中的本地函数。本地函数是从 C# 7.0 开始引入,并在 C# 8.0 和 C# 9.0 中加以完善的。
引入本地函数的原因
我们来看一下微软 C# 语言首席设计师 Mads ...
C#调用pyd
python打包成pyd在本篇博客不多叙述,请读者自行百度,本篇博客主要讲解在C#中如何调用pyd以及遇到的一些问题如何解决。
1.安装pythonnet
pythonnet是一个强大的工具包,用于C#代码与python代码进行交互,不仅可以实现在C#中调用python,也可以实现在python中调用C#.
GitHub:https://github.com/pythonnet/pythonnet
首先 ...