f8g

ウィンドウをキャプチャしてAVI動画を作る (.NET)

機能のつづき: ウィンドウをキャプチャしてアニメーションGIFを作る (.NET) - f8g

AVIファイルの生成

WindowsではDirectShowを使ってAVIファイルを作ることができます。だた、DirectShowを.NETで使おうとすると結構面倒なので、これもまたその辺のライブラリを使って簡単にやります。
http://www.codeproject.com/KB/audio-video/avifilewrapper.aspx
昨日みたいに適当にコンパイルして参照しちゃいましょう。

' 下記以外は前と一緒
Dim AviManager As AviFile.AviManager
Dim AviStream As AviFile.VideoStream

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
    Dim bmp As Bitmap = Me.GetBitmapByHwnd(Me.GetHwndByTitle("メモ帳"))

    ' 最初のフレームか
    If Me.AviStream Is Nothing Then
        Timer1.Enabled = False ' 一回止めないとヤバイ
        Me.AviStream = Me.AviManager.AddVideoStream(True, 1.0! / (Timer1.Interval / 1000.0!), bmp)
        Timer1.Enabled = True
    Else
        Me.AviStream.AddFrame(bmp)
    End If
    
    bmp.Dispose()
End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    If SaveFileDialog1.ShowDialog() = Windows.Forms.DialogResult.OK Then
        Me.AviManager = New AviFile.AviManager(SaveFileDialog1.FileName, False)
        Timer1.Enabled = True
    End If
End Sub

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    If Timer1.Enabled Then
        Timer1.Enabled = False
        Me.AviManager.Close()
    End If
End Sub

最初のフレームのとき止めないとヤバイのは、
http://gyazo.com/361b4552301d150916e57b0ffb582e40.png
みたいなダイアログが出てきてから動画を作るのに、バックグラウンドでTimerが動いてて、変なことになるからです。多分。
今回利用したライブラリは動画を作るだけじゃなく音声も付けられるようなので、自作ラップと一緒に動画にして楽しむ、といった使い方もできます。