WIL説明書(.NET)  3.1.0
スキャンラインハンドラの登録

サイズが大きい画像ファイルを読み込む際は、スキャンラインハンドラを使用して 進行状況を表示する事を推奨します。(必須ではありません)

スキャンラインハンドラとは?

画像の1ラインを読み込む毎にコールバック関数を呼び出す機構です。 画像ファイル入出力クラスの基本クラスで実装されています。
1. ハンドラの実装

Form1 に スキャンラインハンドラ(_progress 関数)を実装します。 引数の owner には FVIL.File.CFviImageFile.ScanLineParam に設定したハンドルが渡されます。 この例では使用しないので呼び出し時に null を設定しています。

Form1.cs
private bool _progress( System.Object owner, double percentage )
{
// (1) 進行状況の表示.
System.Diagnostics.Debug.WriteLine( String.Format("percentage={0}", percentage) );
// (2) 戻り値による読み込み処理の継続(true)と中断(false).
return true;
// return false;
}

  • (1) 進行状況の取得
    引数 percentage から進行状況(0~100)を取得できます。 上記は処理の簡素化のため、デバッガに出力しているだけですが、 通常は プログレスバー 等にこの値を設定して進行状況を表示します。

  • (2) 読み込み処理の継続と中断
    戻り値に true を返すと、読み込み処理は継続します。false を返すと中断します。 非常に長い処理をユーザの要求により中断したい場合などに使用します。
2. 呼び出し

CFviImageFileBmp の Load 前にスキャンラインハンドラを設定します。 ここでは、処理の簡素化のため、ビットマップ画像に限定していますが、 その他の画像ファイルアクセスクラスでも同様の手順で行えます。

Form1.cs
OpenFileDialog dlg = new OpenFileDialog();
dlg.Filter = "画像ファイル(*.bmp)|*.bmp";
dlg.Filter += "|すべてのファイル (*.*)|*.*";
dlg.Multiselect = false;
if (dlg.ShowDialog(this) == DialogResult.OK)
{
try
{
// 画像ファイルの読み込み.
FVIL.File.CFviImageFileBmp bmp = new FVIL.File.CFviImageFileBmp();
// スキャンラインハンドラの登録.
bmp.ScanLineHandler = new FVIL.File.ScanLineDelegate(_progress);
bmp.ScanLineParam = null;
// 読み込み.
bmp.PixelMode = FVIL.PixelMode.Unpacking;
bmp.Load(dlg.FileName, m_image);
// 画像ビューの表示更新.
cFviImageView1.FitImageSize();
cFviImageView1.Refresh();
}
catch (FVIL.CFviException)
{
}
}

  • ScanLineHandler
    このプロパティに前述で作成したハンドラを設定します。

  • ScanLineParam
    ハンドラの第1引数に渡されるパラメータです。 何を渡すかは用途によって異なります。 例えば、設定する関数が static の場合は、このプロパティにハンドラ関数を所有するクラスのインスタンスを設定します。 省略する場合は null を設定します。

Documentation copyright © 2008 FAST Corporation. [B-001864]
Generated on 2024年10月10日(木) 10時07分53秒 for WIL説明書(.NET) by doxygen 1.8.11