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

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

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

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

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

Form1.vb
Private Function _progress(ByVal owner As System.Object, ByVal percentage As Double) As Boolean
'' (1) 進行状況の表示.
System.Diagnostics.Debug.WriteLine(String.Format("percentage={0}", percentage))
'' (2) 戻り値による読み込み処理の継続(true)と中断(false).
Return True
'' Return False
End Function

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

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

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

Form1.vb
Dim dlg As OpenFileDialog = New OpenFileDialog()
dlg.Filter = "画像ファイル(*.bmp)|*.bmp"
dlg.Filter += "|すべてのファイル (*.*)|*.*"
dlg.Multiselect = False
If dlg.ShowDialog(Me) = DialogResult.OK Then
Try
'' 画像ファイルの読み込み.
Dim bmp = New FVIL.File.CFviImageFileBmp()
'' スキャンラインハンドラの登録.
bmp.ScanLineHandler = New FVIL.File.ScanLineDelegate(AddressOf _progress)
bmp.ScanLineParam = Nothing
'' 読み込み.
bmp.PixelMode = FVIL.PixelMode.Unpacking
bmp.Load(dlg.FileName, m_image)
'' 画像ビューの表示更新.
CFviImageView1.FitImageSize()
CFviImageView1.Refresh()
Catch ex As FVIL.CFviException
End Try
End If

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

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