C# 实现视频预览功能(附源码)

1 篇文章 0 订阅
1 篇文章 0 订阅

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

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
实现RichTextBox的打印和预览功能,需要使用PrintDocument和PrintPreviewDialog控件。 首先,在Windows窗体中添加一个RichTextBox控件、一个PrintDocument控件和一个PrintPreviewDialog控件。 然后,在代码中添加以下方法: 打印: ```c# private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e) { Font font = richTextBox1.Font; Brush brush = new SolidBrush(richTextBox1.ForeColor); RectangleF rect = e.PageSettings.PrintableArea; e.Graphics.DrawString(richTextBox1.Text, font, brush, rect); } ``` 预览: ```c# private void printPreviewToolStripMenuItem_Click(object sender, EventArgs e) { PrintPreviewDialog printPreviewDialog1 = new PrintPreviewDialog(); printPreviewDialog1.Document = printDocument1; printPreviewDialog1.ShowDialog(); } ``` 在这个示例中,我们使用PrintDocument的PrintPage事件来打印RichTextBox的内容。在PrintPage事件中,我们获取RichTextBox的字体和颜色,并使用Graphics.DrawString方法将文本绘制到打印页面上。 在预览中,我们创建一个PrintPreviewDialog控件,将PrintDocument控件分配给它,并调用ShowDialog方法来显示预览窗口。 最后,在菜单或工具栏中添加一个按钮,以便用户可以轻松地访问打印和预览功能。 示例代码: ```c# private void printToolStripMenuItem_Click(object sender, EventArgs e) { PrintDialog printDialog1 = new PrintDialog(); printDialog1.Document = printDocument1; if (printDialog1.ShowDialog() == DialogResult.OK) { printDocument1.Print(); } } private void printPreviewToolStripMenuItem_Click(object sender, EventArgs e) { PrintPreviewDialog printPreviewDialog1 = new PrintPreviewDialog(); printPreviewDialog1.Document = printDocument1; printPreviewDialog1.ShowDialog(); } private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e) { Font font = richTextBox1.Font; Brush brush = new SolidBrush(richTextBox1.ForeColor); RectangleF rect = e.PageSettings.PrintableArea; e.Graphics.DrawString(richTextBox1.Text, font, brush, rect); } ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不懂逻辑还爱编程的小胖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值