1. 程式人生 > >c#錄製螢幕 超級簡單!

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;
        }
    }

相關推薦

c#錄製螢幕 超級簡單

使用Aforge.net對螢幕進行截圖,並將每一張BITMAP寫到AVI檔案中。超級簡單! AFORGE.NET的ScreenCaptureStream效能有限,目前測試基本能達到10幀左右。 設定AVIWriter的FrameRate為8幀,但是播放起來像快進一樣,目前還

如何利用Chrom瀏覽器實現滾動截圖,不用下載外掛,超級簡單

相信很多開發者在開發手機端專案的時候,會在瀏覽器按照不同機型開啟檢視效果,可是截圖只能擷取可視區的圖片,我想截全屏網頁內容怎麼辦呢?我看很多百度出來的都是說下載安裝外掛什麼的,覺得很麻煩,跟我來,簡單實現,方法如下: 第一步: 開啟開發者工具 ctrl+shif

如何在 Creator3D 中切換模型貼圖,超級簡單

效果預覽 前兩天有夥伴在 QQ 上詢問,如何在 Creator 3D 中切換模型貼圖。Shawn 之前也沒嘗試過,不過根據之前 Cocos Creator 的經驗以及這幾天對 Creator 3D 的學習,簡單嘗試了一下,方法可行,在此將它分享給大家。 模型材質資源 在 Creator 3D 中,一個 3

我們不一樣老司機教你用C語言制作簡單實用的撩妹神器

能力 pac normal c語言實現 linux系統 要求 以及 dia 自己 你以為C語言就是提供一種編譯、處理低級存儲器、產生少量的機器碼以及不需要任何運行環境支持便能運行的編程語言嗎?你以為C語言就只是以一個標準規格寫出的C語言程序可在許多電腦平臺上進行編譯,甚至包

超級簡單系列--C# Event事件的使用

Event事件的使用 程式碼實現如下: /// <summary> /// 宣告一個委託 /// </summary> /// <param name="key">

微信聊天氣泡隨意換,一鍵製作超級簡單,讓聊天不再枯燥

除了QQ微信也可以製作聊天氣泡,今天小編給大家分享一款微信小程式,只需簡單幾步就可以製作出個性十足的聊天氣泡效果了,趕快一起來看看吧! 這款小程式中提供了豐富的氣泡模板,其中包括遊戲、明星以及動漫模組,同時還提供各種不同型別的快捷短語,只需點選文字內容即可一鍵儲存到編輯框中。 第一

超級簡單的導航選單效果

閱讀本篇文章大約花費您1-3分鐘! 最近剛剛結束了資料庫的課程設計,因為正好學了JavaWeb,就做了一個簡單的管理系統,於是想著做一個選單導航欄,可以將所有的功能都放在這個導航欄中,因為還沒有學前端的框架,就直接用JS寫了一個簡單的效果: 今天就和大家分享一下這個簡單的效果的製作

利用linux下的c語言程式設計來簡單的實現一個shell功能實現

學習了fork(),exec()函式之後,讓我們來簡單是實現來實現一個shell 裡面用到了一些函式,進行對字串進行做一下簡單的處理! #include<stdio.h> #include<errno.h> #include<sys/types

C#實現螢幕錄製

public partial class Form1 : Form { private MultimediaServer server; //在本地內嵌OMCS伺服器 private IMultimediaManager multimediaManager;

C# 泛型的簡單講解和應用

出現 ava 問題 this bsp div arc 但是 int 泛型 什麽是泛型   泛型是 2.0 版 C# 語言和公共語言運行庫 (CLR) 中的一個新功能。泛型將類型參數的概念引入 .NET Framework,類型參數使得設計如下類和方法成為可能:這些類和方

C#中RSA的簡單使用

[] 實例 enc add eat creat sta int padding static void Main(string[] args) { try {

使用linux-c編程實現簡單的ls命令

使用c實現ls命令使用Linux—c編程實現簡單的ls命令 具體代碼如下: 加載的頭文件有stdio.h,sys/types.h,dirent.h,unistd.h,sys/stat.h,fcntl.h,string.h等。 void main(int argc,char **argv){

c++ 設計模式之簡單的工廠模式

urn ret 應用程序 on() name clu get actor new 調試環境:vs2010 // test0.cpp : 定義控制臺應用程序的入口點。 // #include "stdafx.h" #include <iostream>

超級簡單的下載今日頭條和西瓜視頻的方法

iii str 輸入框 新聞資訊 秒拍 輸入 今天 blank 視頻 我們每天用今日頭條看新聞資訊,有時候看到一個視頻,想要保存下來,但今日頭條App裏沒有提供保存視頻的功能。這個時候我們需要借助第三方工具來下載視頻,今天介紹一個超級好用的工具,不需要安裝任何軟件和插件,並

[pthread]Linux C 多線程簡單示例

簡單 _exit bsp clas flags thread read arm color #include <stdio.h> #include <pthread.h> pthread_mutex_t mutex; pthread_con

超級簡單JS網頁倒計時代碼

text minutes -m data tin file hour data- interval <script type="text/javascript"> // JavaScript Document function Sh

C語言事實上不簡單:數組與指針

本質 而不是 getchar() alt 由於 == sizeof 不同 來看 之前在寫C的時候,沒怎麽留意數組。就這麽定義一個。然後顛來倒去的使用即可了。只是後來碰到了點問題。解決後決定寫這麽一篇博客,數組離不開指針。索性就放一起好了。 如今我定義了一個數組:i

MongoDB 系列(一) C# 類似EF語法簡單封裝

reference cor family sha 測試 性別 權限 lec 情況 之前寫過一篇關於MongoDB的封裝 發現太過繁瑣 於是打算從新寫一篇簡易版 1:關於MongoDB的安裝請自行百度,進行權限認證的時候有一個小坑,3.0之後授權認證方式默認的SCRAM-SH

這樣搞,U盤數據恢復很簡單

原因 相關 養成 lan target 容量 cfs images blank U盤的使用率也越來越普及,因為它容量大、攜帶型強、體積小的優勢受到了普羅大眾的喜愛。然而,在U盤的使用中也出現了各種各樣的問題,其中最常見的就是數據丟失。那麽,是什麽原因導致U盤數據丟失呢?數據

14.2-全棧Java筆記: Java Swing創建窗口,原來這麽簡單

java上節我們聊到GUI(Graphical User Interface)的概念,並學習GUI編程中主要需掌握兩個包,分別是:AWT和Swing,本節我們會通過Swing程序中常用的類和控件來實現第一個窗口。 javax.swing.JFrameJFrame在GUI中為一個窗口對象,繼承於Frame。JF