検査レシピ=処理/検査ステップの縦リスト(配線なし)。yfoxlib(yfoximg/yfoxbase)使用。 - ビジュアル・パイプライン(カード+適用後サムネイル+緑/赤 合否) - テンプレート/対話式ウィザードでレシピ生成(CTaskDialog) - パラメータのスライダー・ライブ調整 - レシピ保存/読込(*.itr) + 最近使ったファイル(MRU) - 検査範囲(ROI)を複数マウス指定(ドラッグ追加/右クリック削除) - カードのドラッグ並べ替え - 判定結果画像の保存 + 検査ログCSV(項目拡張) - 処理6種+検査3種(明るさ/白画素率/塊の数) - /selftest(実行+レシピ往復+結果画像+複数ROI塊カウント検証)、/demo Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
60 lines
1.4 KiB
C++
60 lines
1.4 KiB
C++
//
|
|
// 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();
|
|
}
|