如何捕获我的桌面使用.NET的视频? [英] How to capture a video of my desktop with .NET?

查看:125
本文介绍了如何捕获我的桌面使用.NET的视频?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想知道是否有任何的方式来捕捉拍摄我的桌面使用.NET的视频(截屏)?我不是在寻找一个截屏软件,而只是一种技术,可以让我产生自己我的桌面视频。

I would like to know if there is any way to capture a to capture a video (screencast) of my desktop with .NET? I am not looking for a screencast software, but simply a technique that would allow me to generate myself a video of my desktop.

我想到服用多种截图,但我不知道我怎么会用图像序列...

I thought of taking multiple screenshots, but I am not sure of how I could generate programmatically a video with a sequence of images...

是否有人有一个想法?

谢谢!

推荐答案

是啊,有很多方法可以做到这一点。这是一个使用WPF一个非常简单的方法。它的工作原理,我之前已经用它。

Yeah, there are many ways to do this. This is a very simple method using WPF. It works, I've used it before.

http://www.sythe.org/showthread.php?t=175353

从网站:

创建一个新的WPF应用程序,添加对System.Drawing.dll程序,并System.Windows.Forms.dll的。使用方法你所期望的,统计,停止和保存。

Create a new WPF application, add a reference to System.Drawing.dll, and System.Windows.Forms.dll. Use the methods as you would expect, Stat, Stop, and Save.

Public Class ScreenRecorder

    Private Shared tempDir As String = My.Computer.FileSystem.SpecialDirectories.Temp & "\snapshot\"
    Private Shared snap As New System.Threading.Thread(AddressOf Snapshot)
    Private Shared _Bounds As System.Drawing.Rectangle = System.Windows.Forms.Screen.PrimaryScreen.Bounds
    Public Shared Property Bounds() As System.Drawing.Rectangle
        Get
            Return _Bounds
        End Get
        Set(ByVal value As System.Drawing.Rectangle)
            _Bounds = value
        End Set
    End Property
    Private Shared Sub Snapshot()
        If Not My.Computer.FileSystem.DirectoryExists(tempDir) Then _
            My.Computer.FileSystem.CreateDirectory(tempDir)
        Dim Co As Integer = 0
        Do
            Co += 1
            System.Threading.Thread.Sleep(50)
            Dim X As New System.Drawing.Bitmap(_Bounds.Width, _Bounds.Height, System.Drawing.Imaging.PixelFormat.Format32bppArgb)
            Using G = System.Drawing.Graphics.FromImage(X)
                G.CopyFromScreen(_Bounds.Location, New System.Drawing.Point(), _Bounds.Size)
                Dim CurBounds As New System.Drawing.Rectangle(System.Windows.Forms.Cursor.Position - Bounds.Location, System.Windows.Forms.Cursor.Current.Size)
                Forms.Cursors.Default.Draw(G, CurBounds)
            End Using
            Dim FS As New IO.FileStream(tempDir & FormatString(Co.ToString, 5, "0"c) & ".png", IO.FileMode.OpenOrCreate)
            X.Save(FS, System.Drawing.Imaging.ImageFormat.Png)
            X.Dispose()
            FS.Close()
        Loop
    End Sub
    Public Shared Sub ClearRecording()
        If My.Computer.FileSystem.DirectoryExists(tempDir) Then _
        My.Computer.FileSystem.DeleteDirectory(tempDir, FileIO.DeleteDirectoryOption.DeleteAllContents)
        My.Computer.FileSystem.CreateDirectory(tempDir)
    End Sub
    Public Shared Sub Save(ByVal Output As String)
        Dim G As New Windows.Media.Imaging.GifBitmapEncoder

        Dim X As New List(Of IO.FileStream)
        For Each Fi As String In My.Computer.FileSystem.GetFiles(tempDir, FileIO.SearchOption.SearchTopLevelOnly, "*.png")
            Dim TempStream As New IO.FileStream(Fi, IO.FileMode.Open)
            Dim Frame = Imaging.BitmapFrame.Create(TempStream)
            X.Add(TempStream)
            G.Frames.Add(Frame)
        Next
        Dim FS As New IO.FileStream(Output, IO.FileMode.OpenOrCreate)
        G.Save(FS)
        FS.Close()

        For Each St As IO.FileStream In X
            St.Close()

        Next

    End Sub
    Public Shared Sub Start()
        snap = New System.Threading.Thread(AddressOf Snapshot)
        snap.Start()
    End Sub
    Public Shared Sub [Stop]()
        snap.Abort()
    End Sub
    Private Shared Function FormatString(ByVal S As String, ByVal places As Integer, ByVal character As Char) As String
        If S.Length >= places Then Return S
        For X As Integer = S.Length To places
            S = character & S
        Next
        Return S
    End Function

End Class



下面是另一种方法,使用托管DirectX

Here is another method using Managed DirectX

http://www.mdxinfo.com/resources/screencapture.php

另一个资源:

HTTP://www.$c$cproject.com/ KB /音频视频/ CaptureScreenAsVideo.aspx

这篇关于如何捕获我的桌面使用.NET的视频?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆