静止画ファイル保存(JPEG)
概要
イメージデータストリームから1枚のフレームを取得してJPEGファイルに保存する方法を示しています。
サンプルプログラム
Software | IC Imaging Control 3.5, Visual Studio™ 2019 |
---|---|
サンプル(C#) | save_jpeg_cs_3.5.zip |
サンプルツールの外観
private void Form1_Load(object sender, System.EventArgs e)
{
icImagingControl1.ShowDeviceSettingsDialog();
if( icImagingControl1.DeviceValid )
{
icImagingControl1.Sink = new TIS.Imaging.FrameSnapSink();
icImagingControl1.LiveStart();
}
else
{
Close();
}
}
まず、ICImagingControlをフォームにドラッグして貼り付け、保存の為のボタンを配置します。
デバイス選択のダイアログ(.ShowDeviceSettingsDialog)をコールして使用するビデオキャプチャデバイスを選択します。正しいデバイスが選択されれば、.LiveStartによりライブ表示を開始します。
その際にビデオストリームからオンデマンドでフレームを取得するために使用できるSinkタイプFrameSnapSinkクラスを定義します。
private void button1_Click(object sender, System.EventArgs e)
{
TIS.Imaging.FrameSnapSink snapSink = icImagingControl1.Sink as TIS.Imaging.FrameSnapSink;
TIS.Imaging.IFrameQueueBuffer frm = snapSink.SnapSingle(TimeSpan.FromSeconds(5));
SaveFileDialog dlg = new SaveFileDialog();
dlg.AddExtension = true;
dlg.DefaultExt = "jpg";
dlg.Filter = "JPEG Images (*.jpg)|*.jpg||";
dlg.OverwritePrompt = true;
if( dlg.ShowDialog() == DialogResult.OK )
{
TIS.Imaging.FrameExtensions.SaveAsJpeg(frm, dlg.FileName,100);
}
ユーザーが[Save Jpeg]ボタンをクリックすると、アプリケーションがスナップショットを必要とする場合に使用するFrameSnapSinkを使って画像データにアクセスします。SnapSingleではカメラデバイスなどから新しい画像が取得されるのを待ち、取得されたら IFrameQueueBufferインターフェースに取得された画像が入ります。次にdlg.ShowDialog()で保存先選択のダイアログを表示し、イメージの保存先を取得します。最後に.SaveAsJpegによりイメージバッファをファイルに書き出します。.SaveAsJpegにファイル名と画像品質(0~100)を引数として渡すことでJPEGファイルを書き出します。
なお、IC Imaging Control3.5から.MemorySnapImageや.MemorySaveImageが非推奨となっておりますのでご注意ください。