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>
This commit is contained in:
2026-07-23 09:26:10 +09:00
co-authored by Claude Opus 4.8
commit e4eca6b303
24 changed files with 3120 additions and 0 deletions
+59
View File
@@ -0,0 +1,59 @@
//
// App.cpp - CWinApp。GDI+ 起動、/selftest の分岐、メインウィンドウ生成。
//
#include "stdafx.h"
#include "App.h"
#include "MainFrame.h"
#include "SelfTest.h"
CImgTestApp theApp;
CImgTestApp::CImgTestApp() {}
BOOL CImgTestApp::InitInstance()
{
CWinApp::InitInstance();
// 設定(最近使ったレシピ 等)を HKCU\Software\YFox\ImgTestSystem に保存。
SetRegistryKey(L"YFox");
// GDI+ 起動(CImage/CImageEx が JPEG/PNG 読込に使用)。
Gdiplus::GdiplusStartupInput gdiInput;
Gdiplus::GdiplusStartup(&m_gdiplusToken, &gdiInput, NULL);
// コマンドライン /selftest はヘッドレス自己検証を実行して終了。
CString cmd = m_lpCmdLine;
if (cmd.MakeLower().Find(L"/selftest") >= 0)
{
int rc = selftest::Run();
return FALSE; // UI を出さず終了(ExitInstance で GDI+ 停止)
(void)rc;
}
if (cmd.MakeLower().Find(L"/demosave") >= 0)
{
selftest::SaveDemoResult(L"demo_result.png");
return FALSE;
}
CMainFrame* pFrame = new CMainFrame;
if (!pFrame->Create(NULL, L"ImgTestSystem - ノーコード画像検査",
WS_OVERLAPPEDWINDOW, CFrameWnd::rectDefault, NULL, NULL))
{
delete pFrame;
return FALSE;
}
m_pMainWnd = pFrame;
pFrame->ShowWindow(SW_SHOW);
pFrame->UpdateWindow();
if (cmd.Find(L"/demo") >= 0)
pFrame->LoadDemo();
return TRUE;
}
int CImgTestApp::ExitInstance()
{
if (m_gdiplusToken)
Gdiplus::GdiplusShutdown(m_gdiplusToken);
return CWinApp::ExitInstance();
}