最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

WPF使用Accord實(shí)現(xiàn)屏幕錄制功能

 更新時(shí)間:2024年03月05日 10:50:55   作者:WPF開發(fā)者  
這篇文章主要為大家詳細(xì)介紹了WPF如何使用Accord實(shí)現(xiàn)屏幕錄制,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)或工作有一定幫助,感興趣的小伙伴可以了解一下

WPF 使用 Accord 實(shí)現(xiàn)屏幕錄制

框架使用.NET4

Visual Studio 2022

WPF 實(shí)現(xiàn)調(diào)用 FFmpeg 實(shí)現(xiàn)屏幕錄制

WPF 實(shí)現(xiàn)調(diào)用 WindowsAPI 實(shí)現(xiàn)屏幕錄制

Accord 源碼地址

此篇使用 Accord 實(shí)現(xiàn)屏幕錄制,此次使用了三個庫Accord、Accord.Video、Accord.FFMPEG

Accord: 開源的機(jī)器學(xué)習(xí)框架,它提供了一系列用于數(shù)據(jù)處理、圖像處理、機(jī)器學(xué)習(xí)和統(tǒng)計(jì)分析的工具和庫。

Accord.Video:提供了處理視頻數(shù)據(jù),并提供了對視頻文件的讀取、處理和分析功能。

Accord.FFMPEG: 提供了對 FFmpeg 功能的封裝和集成,提供音視頻處理功能,如視頻轉(zhuǎn)碼、格式轉(zhuǎn)換、流媒體處理等。

使用的版本為 3.8.0

實(shí)現(xiàn)代碼

1)新增 AccordHelper 代碼如下:

  • 定義 ScreenCaptureStream 對象用于捕獲屏幕內(nèi)容。
  • 定義了一個 VideoFileWriter 對象用于將捕獲到的屏幕內(nèi)容寫入視頻文件。
  • 在 Start() 方法中,創(chuàng)建 ScreenCaptureStream 對象,并指定捕獲屏幕的區(qū)域?yàn)?code>整個屏幕。
  • 然后再創(chuàng)建了一個 VideoFileWriter 對象,并指定了輸出視頻文件的路徑寬度、高度、幀率視頻編解碼器比特率。
  • 設(shè)置捕獲屏幕幀的間隔為 40 毫秒。
  • 設(shè)置視頻比特率為 1200 * 1000 ,如果設(shè)置較高的比特率視頻會更加清晰,但是文件也會相對增大。
  • 注冊了 NewFrame 事件處理程序,當(dāng)有新的幀捕獲時(shí),將該幀就寫入視頻文件。
  • 在 Stop() 方法中,檢查 screenShot 和 videoWriter 是否為 null,如果不為 null,則分別停止屏幕捕獲和關(guān)閉視頻寫入。
using Accord.Math;
using Accord.Video;
using Accord.Video.FFMPEG;
using System;
using System.Windows;

namespace DesktopRecord.Helper
{
    public class AccordHelper
    {
        static ScreenCaptureStream screenStream;
        static VideoFileWriter videoWriter;
        public static void Start()
        {
            var workArea = SystemParameters.WorkArea.Size;
            var width = (int)workArea.Width;
            var height = (int)workArea.Height;
            var rectangle = new System.Drawing.Rectangle(0, 0, width, height);
            screenStream = new ScreenCaptureStream(rectangle);
            videoWriter = new VideoFileWriter();
            var filePath = $"{Environment.CurrentDirectory}/DesktopRecord_{DateTime.Now.ToString("yyyyMMddHHmmss")}.avi";
            var framerate = new Rational(1000, screenStream.FrameInterval);
            var videoBitRate = 1200 * 1000;
            videoWriter.Open(filePath, width, height, framerate, VideoCodec.MSMPEG4v3, videoBitRate);
            screenStream.FrameInterval = 40;
            screenStream.NewFrame += ScreenStream_NewFrame;
            screenStream.Start();
        }

        private static void ScreenStream_NewFrame(object sender, NewFrameEventArgs eventArgs)
        {
            if (videoWriter == null) return;
            videoWriter.WriteVideoFrame(eventArgs.Frame);
        }

        public static void Stop()
        {
            if (screenStream != null)
            {
                screenStream.Stop();
                screenStream = null;
            }
            if (videoWriter != null)
            {
                videoWriter.Close();
                videoWriter.Dispose();
                videoWriter = null;
            }
        }
    }
}

2)新增 CommOptionView.xaml 代碼如下:

<UserControl
    x:Class="DesktopRecord.View.CommOptionView"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:local="clr-namespace:DesktopRecord.View"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:wd="https://github.com/WPFDevelopersOrg/WPFDevelopers"
    d:DesignHeight="450"
    d:DesignWidth="800"
    mc:Ignorable="d">
    <Grid>
        <StackPanel
            HorizontalAlignment="Center"
            VerticalAlignment="Center"
            Orientation="Horizontal">
            <Button
                Margin="0,0,5,0"
                Command="{Binding RecordCommand}"
                Content="開始錄制"
                Style="{StaticResource WD.SuccessPrimaryButton}" />
            <Button
                Margin="5,0,0,0"
                wd:Loading.IsShow="{Binding IsShow}"
                wd:Loading.LoadingType="Normal"
                Command="{Binding RecordStopCommand}"
                Content="停止錄制"
                Style="{StaticResource WD.DangerPrimaryButton}" />
        </StackPanel>
    </Grid>
</UserControl>

3)修改 MainWindow.xaml 代碼如下:

            <TabItem Height="35" Header="WindowsAPI 錄制">
                <view:CommOptionView>
                    <view:CommOptionView.DataContext>
                        <vm:MainVM RecordEnums="WindowsAPI" />
                    </view:CommOptionView.DataContext>
                </view:CommOptionView>
            </TabItem>
            <TabItem Height="35" Header="Accord 錄制">
                <view:CommOptionView>
                    <view:CommOptionView.DataContext>
                        <vm:MainVM RecordEnums="Accord" />
                    </view:CommOptionView.DataContext>
                </view:CommOptionView>
            </TabItem>

效果圖

以上就是WPF使用Accord實(shí)現(xiàn)屏幕錄制功能的詳細(xì)內(nèi)容,更多關(guān)于WPF屏幕錄制的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Parallel.For循環(huán)與普通for循環(huán)的性能比較

    Parallel.For循環(huán)與普通for循環(huán)的性能比較

    這篇文章介紹了Parallel.For循環(huán)與普通for循環(huán)的性能比較,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-04-04
  • C#命令行編譯器配置方法

    C#命令行編譯器配置方法

    這篇文章主要介紹了C#命令行編譯器配置方法,本文講解了配置C#命令行編譯器、配置其它.NET命令行工具、通過csc命令行編譯器來編譯C#文件實(shí)例等內(nèi)容,需要的朋友可以參考下
    2015-06-06
  • 使用C#開發(fā)ActiveX控件

    使用C#開發(fā)ActiveX控件

    activex控件以前也叫做ole控件,它是微軟ie支持的一種軟件組件或?qū)ο?,可以將其插入到web頁面中,實(shí)現(xiàn)在瀏覽器端執(zhí)行動態(tài)程序功能,以增強(qiáng)瀏覽器端的動態(tài)處理能力。通常activex控件都是用c++或vb語言開發(fā),本文介紹另一種方式,使用c#語言開發(fā)activex控件。
    2017-02-02
  • C#常用日期時(shí)間方法匯總

    C#常用日期時(shí)間方法匯總

    這篇文章介紹了C#常用的日期時(shí)間方法,文中通過示例代碼介紹的非常詳細(xì)。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-04-04
  • C#自定義針對URL地址的處理類實(shí)例

    C#自定義針對URL地址的處理類實(shí)例

    這篇文章主要介紹了C#自定義針對URL地址的處理類,實(shí)例分析了C#解析URL地址實(shí)現(xiàn)URl參數(shù)加密解密及參數(shù)解析的技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-03-03
  • Unity3D啟動外部程序并傳遞參數(shù)的實(shí)現(xiàn)

    Unity3D啟動外部程序并傳遞參數(shù)的實(shí)現(xiàn)

    這篇文章主要介紹了Unity3D啟動外部程序并傳遞參數(shù)的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • C# 標(biāo)準(zhǔn)事件流實(shí)例代碼

    C# 標(biāo)準(zhǔn)事件流實(shí)例代碼

    這篇文章主要介紹了C# 標(biāo)準(zhǔn)事件流的實(shí)例代碼,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • C#代碼設(shè)置開機(jī)啟動示例

    C#代碼設(shè)置開機(jī)啟動示例

    本文介紹了使用C#代碼設(shè)置開機(jī)啟動的方法,原理就是在注冊表啟動項(xiàng)里添加一項(xiàng)
    2014-01-01
  • WPF實(shí)現(xiàn)平面三角形3D運(yùn)動效果

    WPF實(shí)現(xiàn)平面三角形3D運(yùn)動效果

    這篇文章主要為大家詳細(xì)介紹了WPF實(shí)現(xiàn)平面三角形3D運(yùn)動效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-09-09
  • C#影院售票系統(tǒng)畢業(yè)設(shè)計(jì)(2)

    C#影院售票系統(tǒng)畢業(yè)設(shè)計(jì)(2)

    這篇文章主要介紹了C#影院售票系統(tǒng)畢業(yè)設(shè)計(jì),介紹了電影院座位的動態(tài)繪制、電影信息綁定到窗體中如何展現(xiàn)出來,需要的朋友可以參考下
    2015-11-11

最新評論

龙州县| 三江| 玉山县| 曲沃县| 花莲市| 新龙县| 临洮县| 鹿邑县| 璧山县| 武平县| 呼和浩特市| 三原县| 隆安县| 方正县| 岳西县| 西平县| 哈密市| 西吉县| 黑龙江省| 民乐县| 池州市| 茶陵县| 板桥市| 康平县| 太仓市| 林西县| 靖州| 泽普县| 剑河县| 迁安市| 崇信县| 苍山县| 三明市| 时尚| 宁陕县| 武定县| 淮安市| 延川县| 抚顺县| 高台县| 大宁县|