C# 实现视频预览功能(附源码)
Posted 不懂逻辑还爱编程的小胖
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# 实现视频预览功能(附源码)相关的知识,希望对你有一定的参考价值。
C# 实现视频预览功能
最近新同事在项目中遇到一个难题,如何实现本地视频的预览功能?
我首先想到的是利用Emgu CV 来实现此功能。
C/C++中用的是Open CV ,为了使其可以用在.net环境。对Open CV 函数进行了封装,且网上对于Emgu CV的资料比较少。为此也专门在此跟大家交流。
电脑:win10系统,
Emgu CV版本: 3.1.0.1,
开发环境:VS 2019,
一、安装Emgu CV
1、打开NuGet包管理器-浏览-搜索:emgu CV
找到3.1.0.1版本进去安装
安装成功后,回到项目里查看引用项是否包含引用了这些
完了以后可以引用命名空间进行使用了,并添加相应的控件。窗体设计如下
1、textbox 用于显示、记录视频文件的绝对路径。
2、button 用于openfiledialog进行打开选择文件。
3、4、numericUpDown 用于用户进行参数设置。
5、imagebox 是安装emgu CV后带的控件,其主要是显示视频的控件,其原理通俗理解为:视频是由无数张图片,按照一定序列、给其一定的间隔时间(也就是帧速率)去播放图片,就形成了我们所看到的的视频。所以imagebox其实是继承picturebox并增加一些功能进行封装的控件。所以picturebox其实也是可以用来显示视频。如果工具栏中没用出现emgu CV的控件
窗体设置好后就可以进行码了。
其中最重要的的一点就是
///打开视频文件
private void button1_Click(object sender, EventArgs e)
OpenFileDialog openFile = new OpenFileDialog();//实例化选择文件窗口
openFile.Filter = "视频文件|*.mp4*|所有文件|*.*";//筛选文件
if (openFile.ShowDialog() == DialogResult.OK)
textBox1.Text = openFile.FileName;//选择的视频
capture = new Capture(textBox1.Text);//打开视频
framecount = (int)(capture.GetCaptureProperty(Emgu.CV.CvEnum.CapProp.FrameCount));//获取视频总帧数
capture.ImageGrabbed += Capture_ImageGrabbed;
capture.Start();//开始播放
frameindex = 0;//清零
toindex = 0;//清零
源代码:c#视频预览-Demo
c# Winform 实现登录界面验证码功能(文末附源码)
参考技术A 闲来无事,最近自己发现自己的验证码功能还没有写过。于是就写下了这篇文章。界面就比较丑了,一个picturebox,一个textbox,一个button按钮主要想的是先把功能实现了,万一以后业务上需要使用呢。
实现以后的功能图
在文本框中输入对应文字,点击确定来验证,正确时候如图所示
如果验证失败,没有提示,直接更新验证码,当然需要使用的时候根据业务逻辑来就是了,这个就比较简单了。
第一:生成验证码字符串,用到的是Random随机函数
第二:将该字符串画在picturebox中
第三点击图片,刷新验证码
第四验证验证码不区分大小写
或者区分大小写
此时完成
源码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace suijima
public partial class Form1 : Form
public Form1()
InitializeComponent();
//验证码的长度
private const int iVerifyCodeLength = 6;
//验证码
private String strVerifyCode = "";
//匹配字符的临时变量
string strTemp = "";
private void btnUpdate_Click(object sender, EventArgs e)
UpdateVerifyCode();
private void Form1_Load(object sender, EventArgs e)
UpdateVerifyCode();
//更新验证码
private void UpdateVerifyCode()
strVerifyCode = CreateRandomCode(iVerifyCodeLength);
if(strVerifyCode=="")
return;
strTemp = strVerifyCode;
CreateImage(strVerifyCode);
//生成验证码字符串
private string CreateRandomCode(int iLength)
int rand;
char code;
string randomCode = String.Empty;
//生成一定长度的验证码
System.Random random = new Random();
for (int i = 0; i < iLength; i++)
rand = random.Next();
if (rand % 3 == 0)
code = (char)('A' + (char)(rand % 26));
else
code = (char)('0' + (char)(rand % 10));
randomCode += code.ToString();
return randomCode;
/// 创建验证码图片
private void CreateImage(string strVerifyCode)
try
int iRandAngle = 45; //随机转动角度
int iMapWidth = (int)(strVerifyCode.Length * 21);
Bitmap map = new Bitmap(iMapWidth, 28); //创建图片背景
Graphics graph = Graphics.FromImage(map);
graph.Clear(Color.AliceBlue);//清除画面,填充背景
graph.DrawRectangle(new Pen(Color.Black, 0), 0, 0, map.Width - 1, map.Height - 1);//画一个边框
graph.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;//模式
Random rand = new Random();
//背景噪点生成
Pen blackPen = new Pen(Color.LightGray, 0);
for (int i = 0; i < 50; i++)
int x = rand.Next(0, map.Width);
int y = rand.Next(0, map.Height);
graph.DrawRectangle(blackPen, x, y, 1, 1);
//验证码旋转,防止机器识别
char[] chars = strVerifyCode.ToCharArray();//拆散字符串成单字符数组
//文字距中
StringFormat format = new StringFormat(StringFormatFlags.NoClip);
format.Alignment = StringAlignment.Center;
format.LineAlignment = StringAlignment.Center;
//定义颜色
Color[] c = Color.Black, Color.Red, Color.DarkBlue, Color.Green,
Color.Orange, Color.Brown, Color.DarkCyan, Color.Purple ;
//定义字体
string[] font = "Verdana", "Microsoft Sans Serif", "Comic Sans MS", "Arial", "宋体" ;
for (int i = 0; i < chars.Length; i++)
int cindex = rand.Next(7);
int findex = rand.Next(5); Font f = new System.Drawing.Font(font[findex], 13, System.Drawing.FontStyle.Bold);//字体样式(参数2为字体大小)
Brush b = new System.Drawing.SolidBrush(c[cindex]);
Point dot = new Point(16, 16);
float angle = rand.Next(-iRandAngle, iRandAngle);//转动的度数
graph.TranslateTransform(dot.X, dot.Y);//移动光标到指定位置
graph.RotateTransform(angle);
graph.DrawString(chars[i].ToString(), f, b, 1, 1, format);
graph.RotateTransform(-angle);//转回去
graph.TranslateTransform(2, -dot.Y);//移动光标到指定位置
pictureBox1.Image = map;
catch (ArgumentException)
MessageBox.Show("创建图片错误。");
private void button1_Click(object sender, EventArgs e)
//验证大小写
char[] ch1 = textBox1.Text.ToCharArray();
char[] ch2 = strTemp.ToCharArray();
int nCount = 0;
for (int i = 0; i < strTemp.Length;i++ )
if((ch1[i]>='a'&&ch1[i]<='z')||(ch1[i]>='A'&&ch1[i]<='Z'))
if (ch1[i] - 32 == ch2[i] || ch1[i] + 32 == ch2[i])
nCount++;
else
if (ch1[i]==ch2[i])
nCount++;
if (nCount==strTemp.Length)
MessageBox.Show("验证通过");
else
UpdateVerifyCode();
textBox1.Text = "";
////不能验证大小写
//if(textBox1.Text==strTemp)
//
// MessageBox.Show("验证通过");
//
//else
//
// UpdateVerifyCode();
// textBox1.Text = "";
//
/// <summary>
/// 图片点击事件
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void pictureBox1_Click(object sender, EventArgs e)
UpdateVerifyCode();
以上是关于C# 实现视频预览功能(附源码)的主要内容,如果未能解决你的问题,请参考以下文章
游戏开发实战Unity从零开发多人视频聊天功能,无聊了就和自己视频聊天(附源码 | Mirror | 多人视频 | 详细教程)
怎么用Python爬取抖音小视频? 资深程序员都这样爬取的(附源码)