#pragma once // // InspectEngine.h - レシピを yfoximg で実行する検査エンジン。 // ここが唯一 yfoximg(CImgProcessing / CDiBitmap)に依存する層。 // ImgProcessing.h は .cpp 側だけで include し、UI への漏れを防ぐ(前方宣言でラップ)。 // #include "Recipe.h" #include #include 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 m_src; // 読み込んだ原画像 std::unique_ptr m_work; // 作業画像(処理を積み上げる) std::vector> m_shots; // steps[i] 適用後の画像 }; } // namespace core