c#录制屏幕 超级简单!

使用Aforge.net对屏幕进行截图,并将每一张BITMAP写到AVI文件中。超级简单!

AFORGE.NET的ScreenCaptureStream性能有限,目前测试基本能达到10帧左右。

设置AVIWriter的FrameRate为8帧,但是播放起来像快进一样,目前还没有找到原因。暂时采取一个New Frame到达时,多写几次的方法进行规避。

有知道如何处理的请联系我。

详细代码如下:

  public partial class Form1 : Form
    {
        Screen c = Screen.PrimaryScreen;

        AVIWriter write;
        /// <summary>
        /// 截屏实例
        /// </summary>
        ScreenCaptureStream cap;
        Pen p = new Pen(Brushes.Red, 5);
        Pen p2 = new Pen(Brushes.Green, 5);
        bool isStart = false;

        public Form1()
        {
            InitializeComponent();

         }
        void cap_NewFrame(object sender, NewFrameEventArgs eventArgs)
        {
            Debug.WriteLine(DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fff"));
            int x = Control.MousePosition.X;
            int y = Control.MousePosition.Y;
            using (Graphics g = Graphics.FromImage(eventArgs.Frame))
            {
                //画时间
                g.DrawString(DateTime.Now.ToString(), new Font("宋体", 14f, FontStyle.Bold), Brushes.Red, new PointF(100, 100));
                //画鼠标位置
                g.DrawEllipse(p, new Rectangle(x - 10, y - 10, 20, 20));
            }
            if (Control.MouseButtons == MouseButtons.Left)
            {
                //鼠标左键点击时,绘制点击图像
                Bitmap bt_re = (Bitmap)eventArgs.Frame.Clone();
                using (Graphics g = Graphics.FromImage(bt_re))
                {
                    g.SmoothingMode = SmoothingMode.HighSpeed;
                    g.DrawEllipse(p2, new Rectangle(x - 20, y - 20, 40, 40));
                }
                write.AddFrame(eventArgs.Frame);
                write.AddFrame(bt_re);
                write.AddFrame(bt_re);
                write.AddFrame(eventArgs.Frame);
            }
            else
            {
                write.AddFrame(eventArgs.Frame);
            }
            //多写一次,如果不多写,感觉播放像在快进。前面设置了帧速率也没什么用。有知道的高手请回答。
            write.AddFrame(eventArgs.Frame);
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            button2.Enabled = false;
            p.StartCap = LineCap.Round;
            p.EndCap = LineCap.Round;
            p2.StartCap = LineCap.Round;
            p2.EndCap = LineCap.Round;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            isStart = true;
            cap = new ScreenCaptureStream(c.Bounds,125);
            cap.NewFrame += new NewFrameEventHandler(cap_NewFrame);
            string filename=DateTime.Now.ToString()+"avi";
            SaveFileDialog sf = new SaveFileDialog();
            sf.Filter = "视频文件|*.avi";
            if (sf.ShowDialog() == DialogResult.OK)
            {
                filename = sf.FileName;
                write = new AVIWriter();
                write.Open(filename, c.Bounds.Width, c.Bounds.Height);
                write.FrameRate = 8;
                cap.Start();
            }
            button1.Enabled = false;
            button2.Enabled = true;
        }

        private void button2_Click(object sender, EventArgs e)
        {
            //多等1s记录画面
            Thread.Sleep(1000);
            cap.Stop();
            write.Close();
            write.Dispose();
            button1.Enabled = true;
            button2.Enabled = false;
        }
    }

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-20 17:20:18

c#录制屏幕 超级简单!的相关文章

C++编程 使用QT5 SDK录制屏幕并显示

在项目中,我们有要录制屏幕的需求,录制屏幕有多种方法,可以基于windows api的BitBlt .ffmpeg的AVDevice.directx 和QT,本文讲解基于QT5的抓屏.QT相对于其他几种抓屏方式优势是跨平台做的比较好,接口简单,劣势相对于directx抓屏消耗大一些,但directx只能是windows.经过测试directx抓屏速度最快,其他接口速度基本一致. 在我的电脑上qt 1080P屏幕抓屏消耗60~80毫秒,720p消耗30~50,也就是说如果抓屏1080我一秒最多录制

Android 录制屏幕的实现方法

Android 录制屏幕的实现方法 Chrome   2017-02-15 15:32:01 发布 您的评价:       5.0   收藏     0收藏 长久以来,我一直希望能够直接从Android屏幕上进行录制并将其编码为多种格式,以便将录制内容嵌入在任意位置,而不需要安装任何软件. 如今,我们已经接近这个目标.Chrome团队正在添加一种功能,可以通过getUserMedia从Android设备上共享屏幕.我创建了一个原型来录制屏幕并将录制内容流式传输到其他设备,以便将其录制到文件并为其

电脑怎么在线录制屏幕声音,如何内录

手机和电脑已经是生活和工作中都离不开的工具,而录音也是平时使用较多的功能之一,我们都知道录音除了和硬件设施有关外,和我们的录音软件也要很大关系,手机电脑本身都有自带的录音软件,但是往往功能都比较单一,无法实现我们的高要求,那有没有相关软件可以代替呢?电脑怎么在线录制屏幕声音,如何内录? 1.首先需要在电脑上先安装一个专业的录音软件--迅捷录音软件,看看到登录/注册按钮,可以通过三种方式进行登录哦!2.在软件主界面,可以修改格式选项及声音来源,这些都是可以自行选择的,MP3属于正常的录音模式,WA

vivo怎么录屏 手机录制屏幕详细教程

在手机上我们经常可以刷到许多类似于手机游戏之类的屏幕视频我想肯定会有很多人好奇怎么录制的,今天小编所说的便是教大家如何在安卓手机上进行屏幕录像,下面便是关于vivo怎么录屏的具体操作方法,希望能对你们有所帮助. 使用工具:安卓手机 操作方法: 第一步.首先我们录制屏幕视频首先需要在手机的应用商店下载上面一款安卓录屏工具. 第二步.之后我们在手机上运行它,进入它的录屏界面,然后我们便开始录制设置它的参数,比如说清晰度,有标清.高清.超清三种画质可以选择设置,录制方向也有竖屏和横屏两种可以选择. 第

安卓手机上怎么录制屏幕视频

我们已经进入互联网时代,每个人都寸步不离手机.电脑等电子产品,看到美丽好看的视频总想记录下来,毕竟看到喜欢的视频还真不太容易,所以问题来了,安卓手机上怎么录制屏幕视频呢? 使用工具: 手机 操作方法: 1.随着手机的更新换代,很多手机上都是有屏幕录制这个功能,可以录制手机上的任何画面,但是有时候录制下来的视频可能会有一些模糊,所以想要录制好视频,还得需要专业的录制视频工具. 2.比如说我们要录制手机游戏视频,那么首先在手机上打开想要录制的王者荣耀游戏并进入一场游戏对局. 3.然后设置录制游戏时需

美图t8手机怎么录制屏幕

手机录制视频对于现在来说,是一个比较实用的操作方式,而且正好符合当代的潮流发展,比如说录制游戏画面,精彩时刻总是值得被记录:录制电影片段,看到喜欢精彩的片段总是有想要录制分享的冲动:录制视频聊天通话,温馨友爱的时刻不容错过.总之手机上的一切画面都是可以录制下来的,那么美图t8手机怎么录制屏幕?下面便来分享安卓手机录制视频的方法.使用工具:手机操作方法:1.今天所要讲的是针对于安卓用户,所以只适用于安卓手机使用,比如说oppo.vivo.华为.小米.三星.魅族等等都是可以使用的.2.比如说我们录制

JS基础(超级简单)

1     JS基础(超级简单) 1.1 数据类型 1.1.1   基本类型: 1)        Number:特别注意:NaN的检测方法:Nan!=NaN;或者使用isNaN方法 2)        string 3)        boolean 4)        null 5)        undefined 1.1.2   复杂类型 object:date,array,function 1.2 变量 var 变量名=值 变量的作用域:1.全局:以页面为单位.2局部:以函数为单位.

超级简单实用的.NET性能调试工具-----ANTS Performance Profiler

艺术字做到后期,性能成了一个比较大的瓶颈,优化性能的过程中接触了一些.NET性能调试工具,最喜欢的是ANTS Performance Profiler,操作简单,功能也跟我期望的差不多. ANTS Performance Profiler是出自大名鼎鼎的Red Gate,很多人使用过的.NET Reflector就是出自此公司,该公司还出品其他产品,具体请戳http://www.red-gate.com/products/.ANTS Performance Profiler支持.NET平台所有语

Android学习Scroller(三)——控件平移划过屏幕 (Scroller简单使用)

MainActivity如下: package cc.cn; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.app.Activity; /** * Demo描述: * Scroller使用示例--让控件平移划过屏幕 * * 参考资料: * http://blog.cs