前回の記事では、切り取り範囲が分からないので、描画をするようにしました。
今回は、他の方法として、ユーザーに切り取るエリアの指定をしてもらいたいと思います。
【C#】HALCON de 画像処理(描画) | 育児パパの人生備忘録 (t19488sns.com)
やりたい事
いつものことながらやりたい事を整理ます。
【エリア指定】のボタンが押されたら、表示しているコントロール(hWindowControlOrg)の上でマウスをドラッグしてもらいます。ドラッグしてもらったエリアを、切り取りの設定値として入力します。
今回使用する関数は、
■hWindowControlのHalconWindowクラスの関数【DrawRectangle1】を使用します。 今回の場合、表示しているコントロール(hWindowControlOrg)で使用するので、 hWindowControlOrg.HalconWindow.DrawRectangle1 となります。
処理の作成(エリアの指定)
※ボタンの配置とイベントの作成は、省略します。(今回もクリックイベント[Click])
private void btnAreaDesign_Click(object sender, EventArgs e)
{
if (DispOrgImag == null) return; //画像読込されてないなら処理しない
ControlEnable(false); //不要なコントロールは使用不可にする。
hWindowControlOrg.Focus(); //コントロールにフォーカスを合わせる。
//画像切り取り範囲をユーザーに求める
hWindowControlOrg.HalconWindow.DrawRectangle1
(out double top, out double left, out double bottom, out double right);
//ユーザーが決めた範囲を入力(入力する事でイベントが発生)
nudX.Value = (decimal)left;
nudY.Value = (decimal)top;
nudW.Value = (decimal)(right - left);
nudH.Value = (decimal)(bottom - top);
ControlEnable(true); //コントロール有効化
}
hWindowControlOrg.HalconWindow.DrawRectangle1(out double, out double, out double, out double) を使用する事で、今回やりたい事は完了しました。
取得した値はそのまま設定のNumericUpDownに数値を入れれば、前回登録したイベントが実行されるため、描画されます。
ユーザーに範囲を指定してもらいたいコントロール名から行いましょう。
[hWindowControlの名前].HalconWindow.DrawRectangle1()
まとめ
今回は、ユーザーに切り取り範囲を設定してもらう方法の紹介でした。
Halconの方で関数を準備されていたので、正直知っているか知らないかの問題にはなりますが、忘れそうなので、ドンドン使って覚えていきたいと思います。
(補足)範囲設定時の操作方法
左クリックでドラックしてもらいます。(左クリックを押したまま、範囲指定)
描画された範囲を決定前であれば、左クリックを押すことで微調整が可能です。
中心のクロス線を左クリックしたままマウスを動かすと、枠ごと移動できます。
最後に、決定したい場合は、右クリックすると決定になります。
業務でプログラミング(C#/VB/Python)を作っている。
挫折を何回も繰り返し、幾度の壁を乗り越えてきた。
乗り越えてきた事を忘れないように記録に残す。
同じ思いをしている人への情報提供になれたらと思う。
基本は初心者に向けたプログラムの情報を提供する。
コメント