Files
ImgTestSystem/core/InspectEngine.h
T
yoshikazuandClaude Opus 4.8 e4eca6b303 Initial commit: ノーコード画像検査アプリ (MVP + 追加機能一式)
検査レシピ=処理/検査ステップの縦リスト(配線なし)。yfoxlib(yfoximg/yfoxbase)使用。

- ビジュアル・パイプライン(カード+適用後サムネイル+緑/赤 合否)
- テンプレート/対話式ウィザードでレシピ生成(CTaskDialog)
- パラメータのスライダー・ライブ調整
- レシピ保存/読込(*.itr) + 最近使ったファイル(MRU)
- 検査範囲(ROI)を複数マウス指定(ドラッグ追加/右クリック削除)
- カードのドラッグ並べ替え
- 判定結果画像の保存 + 検査ログCSV(項目拡張)
- 処理6種+検査3種(明るさ/白画素率/塊の数)
- /selftest(実行+レシピ往復+結果画像+複数ROI塊カウント検証)、/demo

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-23 09:26:10 +09:00

61 lines
2.1 KiB
C++

#pragma once
//
// InspectEngine.h - レシピを yfoximg で実行する検査エンジン。
// ここが唯一 yfoximg(CImgProcessing / CDiBitmap)に依存する層。
// ImgProcessing.h は .cpp 側だけで include し、UI への漏れを防ぐ(前方宣言でラップ)。
//
#include "Recipe.h"
#include <memory>
#include <vector>
class CDiBitmap; // 前方宣言(ヘッダに yfoximg を持ち込まない)
namespace core {
// 検査全体の結果。
struct RunResult
{
bool hasInspect = false; // 検査ステップが1つ以上あった
bool pass = false; // 総合 PASS/FAIL
bool error = false; // 実行時エラーあり
CString message; // サマリ文
};
// レシピ実行器。作業画像(CDiBitmap)と、各ステップ適用後のスナップショットを保持。
class InspectEngine
{
public:
InspectEngine();
~InspectEngine();
bool LoadImage(LPCWSTR path);
bool HasImage() const;
// レシピを全ステップ実行。各 Step::result を更新し、ステップごとの
// スナップショット画像(サムネイル描画用)を内部に保持する。
RunResult Run(Recipe& recipe);
// 判定結果を注釈画像(最終画像+ROI枠+PASS/FAIL+検査要約)として保存。
bool SaveResultImage(LPCWSTR path, const Recipe& recipe, const RunResult& rr);
// 原画像を DC にアスペクト維持で描画。実際に描いた矩形(オーバーレイ用)を返す。
CRect DrawSource(CDC* pDC, const CRect& rc);
// ステップ i 適用後のスナップショットを描画。実際に描いた矩形を返す(無ければ空)。
CRect DrawShot(CDC* pDC, const CRect& rc, int stepIndex);
bool HasShot(int stepIndex) const;
int SrcWidth() const;
int SrcHeight() const;
int SrcBpp() const;
int WorkWidth() const;
int WorkHeight() const;
int WorkBpp() const;
private:
std::unique_ptr<CDiBitmap> m_src; // 読み込んだ原画像
std::unique_ptr<CDiBitmap> m_work; // 作業画像(処理を積み上げる)
std::vector<std::shared_ptr<CDiBitmap>> m_shots; // steps[i] 適用後の画像
};
} // namespace core