低輝度、高輝度ピクセルの強調 その2
概要
その1のサンプルを発展させ、プログラムからフィルタのパラメータをコントロースする方法を示しています。
サンプルプログラム
Software | IC Imaging Control 3.5, Visual Studio™ 2019 |
---|---|
サンプル(C#) | mark_pixels2_cs_3.5.zip |
サンプル(VB.NET) | mark_pixels2_vb7_3.5.zip |
関連ファイル | clipping_vc7_framefilter_3.5.zip ※ダイアログ画面に関してプラットフォームはx86のみ対応 |
関連ファイルにある”clipping_vc7_framefilter_3.5.zip”は画像処理のフィルタClippingFilter_xx.ftf(dllファイル)を生成するためのプロジェクトファイルとなっています。
ClippingFilter_xx.ftfはサンプルファイルでダイアログを呼び出すために使用されていますが、ClippingFilter_xx.ftfは一部IC Imaging Control3.5の仕様に準拠しておりませんのでご注意ください。
なお、ICImagingControlクラスのFrameFilterCreateメソッドはIC Imaging Control3.5では非推奨となっています。
IC Imaging Control3.5からはFrameFilterクラスを使って画像処理のフィルタ適用することを推奨しています。
IC Imaging Control3.5に準拠した方法・使用できるフィルタはこちらをご覧ください。
サンプルツールの外観
このサンプルでは、低輝度/高輝度ピクセルの表示強調について専用のダイアログを使用するのではなく、直接パラメータを操作する方法を示しています。
private TIS.Imaging.FrameFilter filter;
private filter As TIS.Imaging.FrameFilter
まず、TIS.Imaging.FrameFilter のfilter変数はForm1クラスの中で定義される必要があります。この変数はフレームフィルタとその通信に使用されます。
InitControls();
UpdateControls();
InitControls()
UpdateControls()
このフィルタは以下に示すパラメータを持っています。
Threshold | しきい値 |
---|---|
ClipAboveThreshold | しきい値以上、または以下どちらかかを示すスイッチ |
FillMode, FillColor | 抽出したピクセルを表示するための色やパターンを示す |
しきい値はスライドバーsldThresholdで操作します。しきい値以上、または以下どちらを抽出するのかについては、2つのラジオボタンrbClipAboveとrbClipBelowでコントロールします。プログラムの最初にそのメインフォームで 指定、初期化されています。
private void InitControls()
{
sldThreshold.Minimum = 0;
sldThreshold.Maximum = 255;
}
Private Sub InitControls()
sldThreshold.Minimum = 0
sldThreshold.Maximum = 255
End Sub
InitControls関数により、スライドバーsldThresholdの最小値と最大値が初期化されています。
private void UpdateControls()
{
filter.BeginParameterTransfer();
// "Enable" チェックボックスの更新
cbEnable.Checked = filter.GetBoolParameter("Enable");
// ラジオボタンの更新
bool state = filter.GetBoolParameter("ClipAboveThreshold");
rbClipAbove.Checked = state;
rbClipBelow.Checked = !state;
// スライダーの更新
sldThreshold.Value = filter.GetIntParameter("Threshold");
txThreshold.Text = sldThreshold.Value.ToString();
filter.EndParameterTransfer();
}
Private Sub UpdateControls()
filter.BeginParameterTransfer()
' "Enable" チェックボックスの更新
cbEnable.Checked = filter.GetBoolParameter("Enable")
' ラジオボタンの更新
Dim state As Boolean = filter.GetBoolParameter("ClipAboveThreshold")
rbClipAbove.Checked = state
rbClipBelow.Checked = Not state
' スライダーの更新
sldThreshold.Value = filter.GetIntParameter("Threshold")
txThreshold.Text = sldThreshold.Value
filter.EndParameterTransfer()
End Sub
UpdateControls関数にて、"Enable"、"Threshold"、"ClipAboveThreshold"のパラメータはそれぞれチェックボックスcbEnable、スライドバーsldThresholdと、ラジオボタンrbClipAboveとrbClipBelowにそれぞれ割り当てられます。
private void sldThreshold_Scroll(object sender, System.EventArgs e)
{
filter.BeginParameterTransfer();
filter.SetIntParameter("Threshold", sldThreshold.Value);
filter.EndParameterTransfer();
txThreshold.Text = sldThreshold.Value.ToString();
}
Private Sub sldThreshold_Scroll(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles sldThreshold.Scroll
filter.BeginParameterTransfer()
filter.SetIntParameter("Threshold", sldThreshold.Value)
filter.EndParameterTransfer()
txThreshold.Text = sldThreshold.Value
End Sub
スクロールバーsldThresholdのイベントハンドラーで、その現在の値をフィルタのパラメータ"Threshold"に更新してそのテキストフィールドtxThresholも更新します。
private void rbClipAbove_CheckedChanged(object sender, System.EventArgs e)
{
filter.BeginParameterTransfer();
filter.SetBoolParameter("ClipAboveThreshold", true);
filter.EndParameterTransfer();
rbClipBelow.Checked = false;
}
private void rbClipBelow_CheckedChanged(object sender, System.EventArgs e)
{
filter.BeginParameterTransfer();
filter.SetBoolParameter("ClipAboveThreshold", false);
filter.EndParameterTransfer();
rbClipAbove.Checked = false;
}
Private Sub rbClipBelow_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rbClipBelow.CheckedChanged
filter.BeginParameterTransfer()
filter.SetBoolParameter("ClipAboveThreshold", False)
filter.EndParameterTransfer()
rbClipAbove.Checked = False
End Sub
Private Sub rbClipAbove_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles rbClipAbove.CheckedChanged
filter.BeginParameterTransfer()
filter.SetBoolParameter("ClipAboveThreshold", True)
filter.EndParameterTransfer()
rbClipBelow.Checked = False
End Sub
ラジオボタンrbClipAboveのイベントハンドラーで、"ClipAboveThreshold"をTrueに、rbClipBelowをfalseに設定します。rbClipBelowのイベントハンドラーでは逆に設定します。