低輝度、高輝度ピクセルの強調 その2
その1のサンプルを発展させ、プログラムからフィルタのパラメータをコントロースする方法を示しています。
Software | IC Imaging Control 3.4, Visual Studio™ 2019 |
---|---|
サンプル(C#) | mark_pixels2_cs_3.4.zip |
サンプル(VB.NET) | mark_pixels2_vb7_3.4.zip |
関連ファイル | clipping_vc7_framefilter_3.4.zip |
このサンプルでは、低輝度/高輝度ピクセルの表示強調について専用のダイアログを使用するのではなく、直接パラメータを操作する方法を示しています。
まず、TIS.Imaging.FrameFilter のfilter変数はForm1クラスの中で定義される必要があります。この変数はフレームフィルタとその通信に使用されます。
private TIS.Imaging.FrameFilter filter.
private filter As TIS.Imaging.FrameFilter
このフィルタは以下に示すパラメータを持っています。
Threshold: しきい値
ClipAboveThreshold: しきい値以上、または以下どちらかかを示すスイッチ
FillMode, FillColor: 抽出したピクセルを表示するための色やパターンを示す
しきい値はスライドバーsldThresholdで操作します。しきい値以上、または以下どちらを抽出するのかについては、2つのラジオボタンrbClipAboveとrbClipBelowでコントロールします。プログラムの最初にそのメインフォームで 指定、初期化されています。
InitControls();
UpdateControls();
InitControls()
UpdateControls()
InitControls 関数により、スライドバーsldThresholdの最小値と最大値が初期化されています。
private void InitControls()
{
sldThreshold.Minimum = 0;
sldThreshold.Maximum = 255;
}
Private Sub InitControls()
sldThreshold.Minimum = 0
sldThreshold.Maximum = 255
End Sub
UpdateControls 関数にて、"Enable", "Threshold", "ClipAboveThreshold" のパラメータはそれぞれチェックボックス cbEnable, スライドバーsldThresholdと、ラジオボタンrbClipAboveとrbClipBelowにそれぞれ割り当てられます。
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
スクロールバー sldThresholdのイベントハンドラーで、その現在の値をフィルタのパラメータ"Threshold"に更新してそのテキストフィールドtxThresholも更新します。
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
ラジオボタンrbClipAboveのイベントハンドラーで、"ClipAboveThreshold"をTrueに、rbClipBelow をfalseに設定します。rbClipBelowのイベントハンドラーでは逆に設定します。
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