今回は画像を保存しようと思います。
画像処理の過程の画像を残したい時があります。
そんな時にどうするか考えたら、画像を保存する方法が一番手っ取り早いかなと思いました。
今回使用する関数
画像保存する関数[WriteImage()]です。
HOperatorSet.WriteImage(HObject, HTuple, HTuple, HTuple)
引数の紹介です。
第1引数:[入力]保存したい画像データ 第2引数:拡張子 第3引数:画像のエリア外の色指定(Def:0) 第4引数:パス(拡張子を除く)
サンプルを作ってみる
今回は読み込んだ画像を読み込んだフォルダ内に別名で保存するサンプルを作ろうと思います。
操作画面
簡単にコントロールの説明
btnReadImg :選択された画像を読み込み+hWindowControl1に表示 lblReadDir :選択された画像が入っているフォルダパス hWindowControl1 :選択された画像を表示 btnSave :画像を保存する。 保存するフォルダはlblReadDirのテキスト。 保存するファイル名はtxtFileNameとする txtFileName :保存するファイル名
定義
namespaceの定義から
using HalconDotNet;
そして、フォーム内で使用する変数を定義
HObject DispOrgImg = null; //読み込んだ画像
const double DEF_W = 640.0;
const double DEF_H = 480.0;
処理
btnSaveの処理を紹介します。(他の処理は補足で)
private void btnSave_Click(object sender, EventArgs e)
{
if (DispOrgImg == null) return; //読み込んでいるかどうか
string extension = "png";
string fp = lblReadDir.Text + "\\" + txtFileName.Text;
//ファイルの有無確認
if(System.IO.File.Exists(fp+ "." + extension) == true)
{
MessageBox.Show("ファイルが既に存在しています");
return;
}
//画像保存
HOperatorSet.WriteImage(DispOrgImg, extension, 0, fp);
}
実行結果
ちゃんとpngファイルとして保存されました。他にも拡張子があるので、好きな拡張子を指定しましょう。
まとめ
今回は、画像保存を紹介しました。
なにかと使う機会が多いと思います。
使っていけば、関数名は覚えるので覚えるまで経験を積みましょう。
(自分に言い聞かせる・・・)
補足
ユーザーにファイル指定してもらう関数
private DialogResult SelectImageFile(out string fp)
{
fp = "";
OpenFileDialog ofd = new OpenFileDialog();
ofd.FileName = "";
ofd.InitialDirectory = @"C:\";
ofd.Filter = "画像ファイル(*.png;*.jpg)|*.png;*.jpg";
ofd.Title = "開くファイルを選択してください";
DialogResult res = ofd.ShowDialog();
if (res == DialogResult.OK) fp = ofd.FileName;
return res;
}
画像サイズの比率を変えずに表示枠いっぱいに表示する関数
private void DispZoom(HTuple windowhandle, HObject img)
{
//Zoom方式で表示
HOperatorSet.GetImageSize(img, out HTuple w, out HTuple h);
double rateR = DEF_H / h, rateC = DEF_W / w;
double rate = (rateR < rateC) ? rateR : rateC;
double c1 = -((DEF_W / rate) - w) / 2;
double c2 = c1 + (DEF_W / rate);
double r1 = -((DEF_H / rate) - h) / 2;
double r2 = r1 + (DEF_H / rate);
HOperatorSet.SetPart(windowhandle, r1, c1, r2, c2);
HOperatorSet.DispObj(img, windowhandle);
}
読込ボタンをクリックされた時の処理
private void btnReadImg_Click(object sender, EventArgs e)
{
//初期化
DispOrgImg = null;
//表示削除
HTuple hwndOrg = hWindowControl1.HalconWindow;
HOperatorSet.ClearWindow(hwndOrg);
//画像を選択してもらう
if (SelectImageFile(out string fp) == DialogResult.OK)
{
//画像読込
HOperatorSet.ReadImage(out HObject img, fp);
DispOrgImg = img;
//Zoom方式で表示
DispZoom(hwndOrg, img);
//読み込んだフォルダを表示する
lblReadDir.Text = System.IO.Path.GetDirectoryName(fp);
}
}
業務でプログラミング(C#/VB/Python)を作っている。
挫折を何回も繰り返し、幾度の壁を乗り越えてきた。
乗り越えてきた事を忘れないように記録に残す。
同じ思いをしている人への情報提供になれたらと思う。
基本は初心者に向けたプログラムの情報を提供する。
コメント