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 | 多人视频 | 详细教程)

抖音实战~实现App端视频上传发布落库

怎么用Python爬取抖音小视频? 资深程序员都这样爬取的(附源码)

Android Studio App开发之使用摄像机录制视频和从视频库中选取视频的讲解及实战(附源码)

c# Winform 实现登录界面验证码功能(文末附源码)

商业级项目——基金客户端的架构设计与开发(下)(附源码)