【C#】HALCON de 画像処理(エリア指定)

スポンサーリンク

前回の記事では、切り取り範囲が分からないので、描画をするようにしました。
今回は、他の方法として、ユーザーに切り取るエリアの指定をしてもらいたいと思います。

【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の方で関数を準備されていたので、正直知っているか知らないかの問題にはなりますが、忘れそうなので、ドンドン使って覚えていきたいと思います。

(補足)範囲設定時の操作方法

左クリックでドラックしてもらいます。(左クリックを押したまま、範囲指定)
描画された範囲を決定前であれば、左クリックを押すことで微調整が可能です。
中心のクロス線を左クリックしたままマウスを動かすと、枠ごと移動できます。
最後に、決定したい場合は、右クリックすると決定になります。

コメント

タイトルとURLをコピーしました