AVI動画とJPEG静止画の同時保存 (Version 3.3)
イメージデータストリームから1枚のフレームを取得してJPEGファイルに保存する方法を示しています。
プログラム言語 | .NET C#/Visual Basic |
---|---|
Version | 3.3 |
Software | IC Imaging Control 3.3, Visual Studio™ 2010 |
Download NB.NET sample | Image and AVI Capture - VB NET |
通常ICImagingControlでは動画保存と静止画保存を同時に行う事はできませんが、このサンプルではJPEGファイル保存を行う特別なフレームフィルタを使用する事で解決しています。このフレームフィルタはこのサンプルに含まれています。このサンプルは以下の様に動作します。
- ICImagingControl標準のダイアログを使ってデバイスを開き、設定します。
- 現在使用中のビデオデバイスの設定を保存し、次回プログラム起動時に自動的に呼び出します。
- ICImagingControlのウィンドウサイズに応じてライブ表示をリサイズします。
- コンボボックス内に有効なコーデックをリストします。
- コーデックのプロパティを表示します(有効な場合)。
- AVI保存の一時停止と再開
- AVIファイル保存中の静止画保存
機能の多くは他のサンプルで示されていますので、ここでは "Save Image"フレームフィルタについて説明します。
初めに、変数タイプ TIS.Imaging.FrameFilterをformの最初に定義しています。この変数は SnapImageFilter と名づけられ、静止画保存フィルタへのアクセスに使用されます。
Dim SnapImageFilter As TIS.Imaging.FrameFilter
"Save Image" フィルタは Form1_load subで読み込まれます。フィルタの読み込み時、SnapImageFilter がフィルタの存在をチェックします。もし見つからない場合、フィルタを読み込むことができません。これはアプリケーションのパスに SaveImageFrameFilter.FTF が無い場合に起こり得ます。この場合、フレームフィルタをソリューションに追加します。
SnapImageFilter が正常にロードされたら、ICImagingControlのデバイスパスに挿入します。
SnapImageFilter = IcImagingControl1.FrameFilterCreate("Save Image", "")
If SnapImageFilter Is Nothing Then
MessageBox.Show
("Failed to load the Snap Image filter", "Filter Loading",
MessageBoxButtons.OK, MessageBoxIcon.Warning)
Else
IcImagingControl1.DeviceFrameFilters.Add(SnapImageFilter)
End If
アプリケーションフォームのボタンによって静止画像を保存できるようにするため、ボタンのハンドラーを追加します。ボタンハンドラー btnSnapImage_Click は静止画を保存する前にいくつかの動作をします。
- 有効なデバイスが読み込まれているかを確認
- ライブモードになっているかを確認
- SnapImageFilterが正しくロードされているかの確認
SnapImageFilter のパラメータ"ImageName"には有効なファイル名をセットします。このパラメータはアプリケーションのスレッドとICImagingControlのビデオスレッドの間で転送され、SnapImageFilterがイメージを保存します。そのため、これらはBeginParameterTransferとEndParameterTransferの間にセットされる必要があります。SnapImageFilterはパラメータ"ImageName"がセットされた後、次に入ってくるイメージを取得します。
Private Sub btnSnapImage_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)
Handles btnSnapImage.Click
With IcImagingControl1
If .DeviceValid = True Then
If .LiveVideoRunning = True Then
If Not SnapImageFilter Is Nothing Then
ImageCounter = ImageCounter + 1
Dim ImageFileName As String
ImageFileName = String.Format("Image{0}.jpg", ImageCounter)
SnapImageFilter.BeginParameterTransfer()
' 画像のファイル名を SnapImageFilter にセットし、静止画を保存します
SnapImageFilter.SetStringParameter("ImageName", ImageFileName)
SnapImageFilter.EndParameterTransfer()
End If
End If
End If
End With
End Sub