// DlgDefectFind.cpp : ±¸Çö ÆÄÀÏÀÔ´Ï´Ù. // #include "stdafx.h" #include "ReviewRecipeEditor.h" #include "DlgDefectFind.h" #include "ReviewRecipeEditorDlg.h" #include "CHImageControls/CHImageView.h" #include "CHImageControls/CHImageProcess.h" #include "CHReviewDefectFinder/ReviewDefectFinder.h" using namespace CHImageControls; // CDlgDefectFind ´ëÈ­ »óÀÚÀÔ´Ï´Ù. IMPLEMENT_DYNAMIC(CDlgDefectFind, CDialog) CDlgDefectFind::CDlgDefectFind(CWnd* pParent /*=NULL*/) : CDialog(CDlgDefectFind::IDD, pParent) { m_pImageView = new CCHImageView(this); m_pSourceImage = new CCHImageData(); m_pResultImage = new CCHImageData(); m_pBandImage = new CCHImageData(); m_pDefectFindProcess = new CReviewDefectFinder(); } CDlgDefectFind::~CDlgDefectFind() { if (m_pImageView) delete m_pImageView; if (m_pSourceImage) delete m_pSourceImage; if (m_pResultImage) delete m_pResultImage; if (m_pBandImage) delete m_pBandImage; if (m_pDefectFindProcess) delete m_pDefectFindProcess; } void CDlgDefectFind::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); DDX_Control(pDX, IDC_GRID_RCP_DEFECT_FIND_INFO, m_ctrlGridDefectFindInfo); DDX_Control(pDX, IDC_GRID_RCP_DEFECT_RESULT, m_ctrlGridDefectResult); DDX_Control(pDX, IDC_CHECK_DEFECT_FIND, m_ctrlCheckDefectFind); DDX_Control(pDX, IDC_RADIO_VIEW_TYPE_0, m_ctrlViewType); DDX_Control(pDX, IDC_CHECK_VIEW_DEFECT, m_ctrlViewDefect); } BEGIN_MESSAGE_MAP(CDlgDefectFind, CDialog) ON_BN_CLICKED(IDC_BUTTON_RCP_DEFECT_FIND_RESET, &CDlgDefectFind::OnBnClickedButtonRcpDefectFindReset) ON_BN_CLICKED(IDC_BUTTON_RCP_DEFECT_FIND_APPLY, &CDlgDefectFind::OnBnClickedButtonRcpDefectFindApply) ON_BN_CLICKED(IDC_BUTTON_LOAD_IMAGE, &CDlgDefectFind::OnBnClickedButtonLoadImage) ON_BN_CLICKED(IDC_BUTTON_INSPECT_TEST, &CDlgDefectFind::OnBnClickedButtonInspectTest) ON_BN_CLICKED(IDC_BUTTON_SAVE_IMAGE, &CDlgDefectFind::OnBnClickedButtonSaveImage) ON_BN_CLICKED(IDC_RADIO_VIEW_TYPE_0, &CDlgDefectFind::OnBnClickedRadioViewType0) ON_BN_CLICKED(IDC_RADIO_VIEW_TYPE_1, &CDlgDefectFind::OnBnClickedRadioViewType1) ON_BN_CLICKED(IDC_CHECK_VIEW_DEFECT, &CDlgDefectFind::OnBnClickedCheckViewDefect) END_MESSAGE_MAP() // CDlgDefectFind ¸Þ½ÃÁö 󸮱âÀÔ´Ï´Ù. BOOL CDlgDefectFind::OnInitDialog() { CDialog::OnInitDialog(); // TODO: ¿©±â¿¡ Ãß°¡ ÃʱâÈ­ ÀÛ¾÷À» Ãß°¡ÇÕ´Ï´Ù. InitDefectFindInfoGridControl(); FillDefectFindInfo(); InitDefectResultGridControl(); if (m_pImageView) { CRect rect; rect.left = 10; rect.top = 180; rect.right = rect.left + 552; rect.bottom = rect.top + 414; m_pImageView->Create(NULL, NULL, WS_CHILD | WS_VISIBLE | LBS_NOTIFY , rect, this, 0); m_pImageView->SetDrawType(DrawFit); m_pImageView->ShowWindow(SW_SHOW); } return TRUE; // return TRUE unless you set the focus to a control // ¿¹¿Ü: OCX ¼Ó¼º ÆäÀÌÁö´Â FALSE¸¦ ¹ÝÈ¯ÇØ¾ß ÇÕ´Ï´Ù. } BOOL CDlgDefectFind::PreTranslateMessage(MSG* pMsg) { // TODO: ¿©±â¿¡ Ư¼öÈ­µÈ Äڵ带 Ãß°¡ ¹×/¶Ç´Â ±âº» Ŭ·¡½º¸¦ È£ÃâÇÕ´Ï´Ù. if( pMsg->message == WM_KEYDOWN ) { if(pMsg->wParam == VK_RETURN || pMsg->wParam == VK_ESCAPE ) { ::TranslateMessage(pMsg); ::DispatchMessage(pMsg); return TRUE; } } return CDialog::PreTranslateMessage(pMsg); } void CDlgDefectFind::OnBnClickedButtonRcpDefectFindReset() { // TODO: ¿©±â¿¡ ÄÁÆ®·Ñ ¾Ë¸² 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù. int i, nRowIdx, nColIdx; CString strItemText; nRowIdx = 1; strItemText = _T(""); nColIdx = 0; for(i = 0; i < DEFECT_FIND_INFO_GRID_COL_COUNT; i++) { m_ctrlGridDefectFindInfo.SetItemText(nRowIdx, nColIdx++, strItemText); } m_ctrlGridDefectFindInfo.Invalidate(FALSE); m_ctrlCheckDefectFind.SetCheck(FALSE); } void CDlgDefectFind::OnBnClickedButtonRcpDefectFindApply() { // TODO: ¿©±â¿¡ ÄÁÆ®·Ñ ¾Ë¸² 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù. UpdateData(TRUE); int nRowIdx, nColIdx; CString strItemText; CRcp_RsDefectFindManager* pRcpRsDefectFindManager = NULL; CReviewRecipeEditorDlg* pDlg = (CReviewRecipeEditorDlg*)AfxGetMainWnd(); if(pDlg == NULL) return; pRcpRsDefectFindManager = pDlg->GetRsDefectFindManager(); if(pRcpRsDefectFindManager == NULL) return; nRowIdx = 0; nColIdx = 1; //¼öÇà À¯¹« pRcpRsDefectFindManager->GetRsRcpDefectFindInfo()->m_bDefectFind = m_ctrlCheckDefectFind.GetCheck(); // °Ë»ç¹æÇâ CStringArray strArrayOption; strItemText = m_ctrlGridDefectFindInfo.GetItemText(nRowIdx, nColIdx); CGridCellCombo* pCellCombo = (CGridCellCombo*)m_ctrlGridDefectFindInfo.GetCell(nRowIdx, nColIdx); if(pCellCombo) { strArrayOption.RemoveAll(); strItemText = pCellCombo->GetText(); pCellCombo->GetOptions(strArrayOption); int nArrayCount = (int)strArrayOption.GetCount(); CString strTemp = _T(""); for(int i = 0; i < nArrayCount; i++) { strTemp = strArrayOption.GetAt(i); if(strTemp.Compare(strItemText) == 0) { pRcpRsDefectFindManager->GetRsRcpDefectFindInfo()->m_nDirection = i; break; } } } nRowIdx++; //X ¹æÇâ ÇÇÄ¡ strItemText = m_ctrlGridDefectFindInfo.GetItemText(nRowIdx, nColIdx); pRcpRsDefectFindManager->GetRsRcpDefectFindInfo()->m_nDFPitchX = _ttoi(strItemText); nRowIdx++; //Y ¹æÇâ ÇÇÄ¡ strItemText = m_ctrlGridDefectFindInfo.GetItemText(nRowIdx, nColIdx); pRcpRsDefectFindManager->GetRsRcpDefectFindInfo()->m_nDFPitchY = _ttoi(strItemText); nRowIdx++; //ÀÚµ¿ ÇÇÄ¡ Ž»ö ¹üÀ§ strItemText = m_ctrlGridDefectFindInfo.GetItemText(nRowIdx, nColIdx); pRcpRsDefectFindManager->GetRsRcpDefectFindInfo()->m_nDFAutoPitchRange = _ttoi(strItemText); nRowIdx++; // ¹®Åΰª1 strItemText = m_ctrlGridDefectFindInfo.GetItemText(nRowIdx, nColIdx); pRcpRsDefectFindManager->GetRsRcpDefectFindInfo()->m_nDFThreshold = _ttoi(strItemText); nRowIdx++; // ¹®Åΰª2 strItemText = m_ctrlGridDefectFindInfo.GetItemText(nRowIdx, nColIdx); pRcpRsDefectFindManager->GetRsRcpDefectFindInfo()->m_nDFThreshold2 = _ttoi(strItemText); nRowIdx++; } void CDlgDefectFind::InitDefectFindInfoGridControl() { int nRowIdx, nColIdx, nRows, nCols, nFixRows, nDataColumnWidth, nMargin; CString strTemp; CRect rect; nRows = DEFECT_FIND_INFO_GRID_ROW_COUNT; nCols = DEFECT_FIND_INFO_GRID_COL_COUNT; nFixRows = 1; nRowIdx = 0; nColIdx = 0; m_ctrlGridDefectFindInfo.GetWindowRect(&rect); m_ctrlGridDefectFindInfo.GetDefaultCell(FALSE, FALSE)->SetBackClr(RGB(0xFF, 0xFF, 0xE0)); m_ctrlGridDefectFindInfo.SetRowCount(nRows); m_ctrlGridDefectFindInfo.SetColumnCount(nCols); m_ctrlGridDefectFindInfo.SetFixedColumnCount(nFixRows); nMargin = 5; nDataColumnWidth = (rect.Width() - nMargin) / DEFECT_FIND_INFO_GRID_COL_COUNT; m_ctrlGridDefectFindInfo.SetColumnWidth(0, nDataColumnWidth); m_ctrlGridDefectFindInfo.SetColumnWidth(1, nDataColumnWidth); GV_ITEM Item; Item.mask = GVIF_TEXT; Item.row = nRowIdx; Item.col = nColIdx; strTemp.Format(_T("Inspect Direction")); Item.strText = strTemp; m_ctrlGridDefectFindInfo.SetItem(&Item); nRowIdx++; Item.row = nRowIdx; Item.col = nColIdx; strTemp.Format(_T("Horizontal Pitch (um)")); Item.strText = strTemp; m_ctrlGridDefectFindInfo.SetItem(&Item); nRowIdx++; Item.row = nRowIdx; Item.col = nColIdx; strTemp.Format(_T("Vertical Pitch (um)")); Item.strText = strTemp; m_ctrlGridDefectFindInfo.SetItem(&Item); nRowIdx++; Item.row = nRowIdx; Item.col = nColIdx; strTemp.Format(_T("DPC Range (pixel)")); Item.strText = strTemp; m_ctrlGridDefectFindInfo.SetItem(&Item); nRowIdx++; Item.row = nRowIdx; Item.col = nColIdx; strTemp.Format(_T("1st Threshold (gLevel)")); Item.strText = strTemp; m_ctrlGridDefectFindInfo.SetItem(&Item); nRowIdx++; Item.row = nRowIdx; Item.col = nColIdx; strTemp.Format(_T("2nd Threshold (gLevel)")); Item.strText = strTemp; m_ctrlGridDefectFindInfo.SetItem(&Item); } void CDlgDefectFind::InitDefectResultGridControl() { int nRowIdx, nColIdx, nRows, nCols, nFixRows, nDataColumnWidth, nMargin; CString strTemp; CRect rect; nRows = DEFECT_RESULT_GRID_ROW_COUNT; nCols = DEFECT_RESULT_GRID_COL_COUNT; nFixRows = 1; nRowIdx = 0; nColIdx = 0; m_ctrlGridDefectResult.GetWindowRect(&rect); m_ctrlGridDefectResult.GetDefaultCell(FALSE, FALSE)->SetBackClr(RGB(0xFF, 0xFF, 0xE0)); m_ctrlGridDefectResult.SetRowCount(nRows); m_ctrlGridDefectResult.SetColumnCount(nCols); m_ctrlGridDefectResult.SetFixedColumnCount(nFixRows); nMargin = 30; nDataColumnWidth = (rect.Width() - nMargin) / DEFECT_RESULT_GRID_COL_COUNT; m_ctrlGridDefectResult.SetColumnWidth(0, nDataColumnWidth); m_ctrlGridDefectResult.SetColumnWidth(1, nDataColumnWidth); GV_ITEM Item; Item.mask = GVIF_TEXT; Item.row = nRowIdx; Item.col = nColIdx; strTemp.Format(_T("Center X (pixel)")); Item.strText = strTemp; m_ctrlGridDefectResult.SetItem(&Item); nRowIdx++; Item.row = nRowIdx; Item.col = nColIdx; strTemp.Format(_T("Center Y (pixel)")); Item.strText = strTemp; m_ctrlGridDefectResult.SetItem(&Item); nRowIdx++; Item.row = nRowIdx; Item.col = nColIdx; strTemp.Format(_T("Area (pixel)")); Item.strText = strTemp; m_ctrlGridDefectResult.SetItem(&Item); nRowIdx++; Item.row = nRowIdx; Item.col = nColIdx; strTemp.Format(_T("Peak (gLevel)")); Item.strText = strTemp; m_ctrlGridDefectResult.SetItem(&Item); nRowIdx++; Item.row = nRowIdx; Item.col = nColIdx; strTemp.Format(_T("R Scale (um)")); Item.strText = strTemp; m_ctrlGridDefectResult.SetItem(&Item); nRowIdx++; Item.row = nRowIdx; Item.col = nColIdx; strTemp.Format(_T("Real Pich (pixel)")); Item.strText = strTemp; m_ctrlGridDefectResult.SetItem(&Item); nRowIdx++; Item.row = nRowIdx; Item.col = nColIdx; strTemp.Format(_T("Rect Left (pixel)")); Item.strText = strTemp; m_ctrlGridDefectResult.SetItem(&Item); nRowIdx++; Item.row = nRowIdx; Item.col = nColIdx; strTemp.Format(_T("Rect Top (pixel)")); Item.strText = strTemp; m_ctrlGridDefectResult.SetItem(&Item); nRowIdx++; Item.row = nRowIdx; Item.col = nColIdx; strTemp.Format(_T("Rect Right (pixel)")); Item.strText = strTemp; m_ctrlGridDefectResult.SetItem(&Item); nRowIdx++; Item.row = nRowIdx; Item.col = nColIdx; strTemp.Format(_T("Rect Bottom (pixel)")); Item.strText = strTemp; m_ctrlGridDefectResult.SetItem(&Item); nRowIdx++; Item.row = nRowIdx; Item.col = nColIdx; strTemp.Format(_T("Average Gray (gLevel)")); Item.strText = strTemp; m_ctrlGridDefectResult.SetItem(&Item); nRowIdx++; Item.row = nRowIdx; Item.col = nColIdx; strTemp.Format(_T("Defect Result 12")); Item.strText = strTemp; m_ctrlGridDefectResult.SetItem(&Item); } void CDlgDefectFind::FillDefectResult() { int nRowIdx, nColIdx; CString strItemText; CRcp_RsDefectFindManager* pRcpRsDefectFindManager = NULL; CReviewRecipeEditorDlg* pDlg = (CReviewRecipeEditorDlg*)AfxGetMainWnd(); if(pDlg == NULL) return; //¹æÇâÁ¤º¸ CStringArray strArrayOption; strArrayOption.RemoveAll(); for(int i = 0; i < 2; i++) { switch(i) { case 0: // horizontal strArrayOption.Add(_T("Horizontal")); break; case 1: // vertical strArrayOption.Add(_T("Vertical")); break; } } pRcpRsDefectFindManager = pDlg->GetRsDefectFindManager(); if(pRcpRsDefectFindManager == NULL) return; //¼öÇà À¯¹« m_ctrlCheckDefectFind.SetCheck(pRcpRsDefectFindManager->GetRsRcpDefectFindInfo()->m_bDefectFind); nRowIdx = 0; nColIdx = 1; // °Ë»ç¹æÇâ m_ctrlGridDefectFindInfo.SetCellType(nRowIdx, nColIdx, RUNTIME_CLASS(CGridCellCombo)); CGridCellCombo* pCellCombo = (CGridCellCombo*)m_ctrlGridDefectFindInfo.GetCell(nRowIdx, nColIdx); pCellCombo->SetOptions(strArrayOption); pCellCombo->SetStyle(CBS_DROPDOWN); m_ctrlGridDefectFindInfo.SetItemText(nRowIdx, nColIdx, strArrayOption.GetAt(pRcpRsDefectFindManager->GetRsRcpDefectFindInfo()->m_nDirection)); nRowIdx++; // ¹æÇâ ÇÇÄ¡ strItemText.Format(_T("%d"), pRcpRsDefectFindManager->GetRsRcpDefectFindInfo()->m_nDFPitchX); m_ctrlGridDefectFindInfo.SetItemText(nRowIdx, nColIdx, strItemText); nRowIdx++; // ¹æÇâ ÇÇÄ¡ strItemText.Format(_T("%d"), pRcpRsDefectFindManager->GetRsRcpDefectFindInfo()->m_nDFPitchY); m_ctrlGridDefectFindInfo.SetItemText(nRowIdx, nColIdx, strItemText); nRowIdx++; //ÇÇÄ¡ Ž»ö ¹üÀ§ strItemText.Format(_T("%d"), pRcpRsDefectFindManager->GetRsRcpDefectFindInfo()->m_nDFAutoPitchRange); m_ctrlGridDefectFindInfo.SetItemText(nRowIdx, nColIdx, strItemText); nRowIdx++; // 1Â÷ ¹®Åΰª strItemText.Format(_T("%d"), pRcpRsDefectFindManager->GetRsRcpDefectFindInfo()->m_nDFThreshold); m_ctrlGridDefectFindInfo.SetItemText(nRowIdx, nColIdx, strItemText); nRowIdx++; // 2Â÷ ¹®Åΰª strItemText.Format(_T("%d"), pRcpRsDefectFindManager->GetRsRcpDefectFindInfo()->m_nDFThreshold2); m_ctrlGridDefectFindInfo.SetItemText(nRowIdx, nColIdx, strItemText); nRowIdx++; m_ctrlGridDefectFindInfo.Invalidate(FALSE); } void CDlgDefectFind::FillDefectFindInfo() { int nRowIdx, nColIdx; CString strItemText; CRcp_RsDefectFindManager* pRcpRsDefectFindManager = NULL; CReviewRecipeEditorDlg* pDlg = (CReviewRecipeEditorDlg*)AfxGetMainWnd(); if(pDlg == NULL) return; //¹æÇâÁ¤º¸ CStringArray strArrayOption; strArrayOption.RemoveAll(); for(int i = 0; i < 2; i++) { switch(i) { case 0: // horizontal strArrayOption.Add(_T("Horizontal")); break; case 1: // vertical strArrayOption.Add(_T("Vertical")); break; } } pRcpRsDefectFindManager = pDlg->GetRsDefectFindManager(); if(pRcpRsDefectFindManager == NULL) return; //¼öÇà À¯¹« m_ctrlCheckDefectFind.SetCheck(pRcpRsDefectFindManager->GetRsRcpDefectFindInfo()->m_bDefectFind); nRowIdx = 0; nColIdx = 1; // °Ë»ç¹æÇâ m_ctrlGridDefectFindInfo.SetCellType(nRowIdx, nColIdx, RUNTIME_CLASS(CGridCellCombo)); CGridCellCombo* pCellCombo = (CGridCellCombo*)m_ctrlGridDefectFindInfo.GetCell(nRowIdx, nColIdx); pCellCombo->SetOptions(strArrayOption); pCellCombo->SetStyle(CBS_DROPDOWN); m_ctrlGridDefectFindInfo.SetItemText(nRowIdx, nColIdx, strArrayOption.GetAt(pRcpRsDefectFindManager->GetRsRcpDefectFindInfo()->m_nDirection)); nRowIdx++; // ¹æÇâ ÇÇÄ¡ strItemText.Format(_T("%d"), pRcpRsDefectFindManager->GetRsRcpDefectFindInfo()->m_nDFPitchX); m_ctrlGridDefectFindInfo.SetItemText(nRowIdx, nColIdx, strItemText); nRowIdx++; // ¹æÇâ ÇÇÄ¡ strItemText.Format(_T("%d"), pRcpRsDefectFindManager->GetRsRcpDefectFindInfo()->m_nDFPitchY); m_ctrlGridDefectFindInfo.SetItemText(nRowIdx, nColIdx, strItemText); nRowIdx++; //ÇÇÄ¡ Ž»ö ¹üÀ§ strItemText.Format(_T("%d"), pRcpRsDefectFindManager->GetRsRcpDefectFindInfo()->m_nDFAutoPitchRange); m_ctrlGridDefectFindInfo.SetItemText(nRowIdx, nColIdx, strItemText); nRowIdx++; // 1Â÷ ¹®Åΰª strItemText.Format(_T("%d"), pRcpRsDefectFindManager->GetRsRcpDefectFindInfo()->m_nDFThreshold); m_ctrlGridDefectFindInfo.SetItemText(nRowIdx, nColIdx, strItemText); nRowIdx++; // 2Â÷ ¹®Åΰª strItemText.Format(_T("%d"), pRcpRsDefectFindManager->GetRsRcpDefectFindInfo()->m_nDFThreshold2); m_ctrlGridDefectFindInfo.SetItemText(nRowIdx, nColIdx, strItemText); nRowIdx++; m_ctrlGridDefectFindInfo.Invalidate(FALSE); } void CDlgDefectFind::UpdateDialogData() { FillDefectFindInfo(); Invalidate(FALSE); } void CDlgDefectFind::OnBnClickedButtonLoadImage() { CString szFilter = _T("All Files(*.*)|*.*||"); CString strPath; CFileDialog dlg(TRUE, NULL, NULL, OFN_HIDEREADONLY, szFilter); dlg.m_ofn.lpstrTitle = _T("Load Image"); if(dlg.DoModal() == IDOK) { if (m_pSourceImage->LoadImage(dlg.GetPathName())) { m_pImageView->CopyImageFrom(m_pSourceImage); m_pSourceImage->GetBandImage(BandTypeGray, m_pBandImage); m_pResultImage->CopyImageFrom(m_pBandImage); m_pResultImage->ClearImage(0); m_pImageView->Invalidate(TRUE); } } } void CDlgDefectFind::OnBnClickedButtonSaveImage() { CString szFilter = _T("All Files(*.*)|*.*||"); CString strPath; CFileDialog dlg(FALSE, NULL, NULL, OFN_HIDEREADONLY, szFilter); dlg.m_ofn.lpstrTitle = _T("Save Image"); if(dlg.DoModal() == IDOK) { if (m_pImageView->SaveImage(dlg.GetPathName())) { } } } void CDlgDefectFind::OnBnClickedRadioViewType0() { m_pImageView->CopyImageFrom(m_pSourceImage); m_pImageView->Invalidate(TRUE); } void CDlgDefectFind::OnBnClickedRadioViewType1() { m_pImageView->CopyImageFrom(m_pResultImage); m_pImageView->Invalidate(TRUE); } void CDlgDefectFind::OnBnClickedCheckViewDefect() { } void CDlgDefectFind::OnBnClickedButtonInspectTest() { m_pImageView->DeleteAllDrawObject(); if (m_pBandImage->GetImageExist()==FALSE) { AfxMessageBox(_T("Image Load Please!"));//_T("À̹ÌÁö¸¦ ¸ÕÀú ·ÎµåÇϼ¼¿ä!")); return; } OnBnClickedButtonRcpDefectFindApply(); CReviewRecipeEditorDlg* pDlg = (CReviewRecipeEditorDlg*)AfxGetMainWnd(); if(pDlg==NULL) { AfxMessageBox(_T("Refer to NULL Pointer!"));//_T("NULL Æ÷ÀÎÅÍ ÂüÁ¶!")); return; } CRcp_RsDefectFindManager* pRcpRsDefectFindManager = pDlg->GetRsDefectFindManager(); if(pRcpRsDefectFindManager==NULL) { AfxMessageBox(_T("Refer to NULL Pointer!"));//_T("NULL Æ÷ÀÎÅÍ ÂüÁ¶!")); return; } // set param SReviewDefectFindParam param; param.nDirection = pRcpRsDefectFindManager->GetRsRcpDefectFindInfo()->m_nDirection; param.dPitchX = pRcpRsDefectFindManager->GetRsRcpDefectFindInfo()->m_nDFPitchX; param.dPitchY = pRcpRsDefectFindManager->GetRsRcpDefectFindInfo()->m_nDFPitchY; param.nAutoPitchRange = pRcpRsDefectFindManager->GetRsRcpDefectFindInfo()->m_nDFAutoPitchRange; param.nThreshold = pRcpRsDefectFindManager->GetRsRcpDefectFindInfo()->m_nDFThreshold; param.nThreshold2 = pRcpRsDefectFindManager->GetRsRcpDefectFindInfo()->m_nDFThreshold2; param.dResolutionX = 0.44; //um param.dResolutionY = 0.44; //um BYTE *pBuffer = (BYTE*) m_pBandImage->GetImageBuffer(); int nWidth = m_pBandImage->GetWidth(); int nHeight = m_pBandImage->GetHeight(); double dLightValue = 0.0; CCHImageProcess::ImageAverage(m_pBandImage, dLightValue); // inspect SReviewDefectFindResult result; if (m_pDefectFindProcess->FindDefect(pBuffer, nWidth, nHeight, param, result)) { CCHDrawObject object; object.nObjectType = ObjectTextRect; object.nLeft = result.rtDefectRect.left; object.nTop = result.rtDefectRect.top; object.nRight = result.rtDefectRect.right; object.nBottom = result.rtDefectRect.bottom; object.nForeColor = RGB(255,0,0); object.strTextString.Format(_T("%d"),result.nDefectArea); m_pImageView->AddDrawObject(object); m_pImageView->Invalidate(TRUE); int nColIdx = 1; int nRowIdx = 0; CString strText = _T(""); strText.Format(_T("%d"), result.nDefectPosX); m_ctrlGridDefectResult.SetItemText(nRowIdx++, nColIdx, strText); strText.Format(_T("%d"), result.nDefectPosY); m_ctrlGridDefectResult.SetItemText(nRowIdx++, nColIdx, strText); strText.Format(_T("%d"), result.nDefectArea); m_ctrlGridDefectResult.SetItemText(nRowIdx++, nColIdx, strText); strText.Format(_T("%d"), result.sDefectPeak); m_ctrlGridDefectResult.SetItemText(nRowIdx++, nColIdx, strText); strText.Format(_T("%d"), result.nDefectRScale); m_ctrlGridDefectResult.SetItemText(nRowIdx++, nColIdx, strText); strText.Format(_T("%.3lf"), result.dDefectPitch); m_ctrlGridDefectResult.SetItemText(nRowIdx++, nColIdx, strText); strText.Format(_T("%d"), result.rtDefectRect.left); m_ctrlGridDefectResult.SetItemText(nRowIdx++, nColIdx, strText); strText.Format(_T("%d"), result.rtDefectRect.top); m_ctrlGridDefectResult.SetItemText(nRowIdx++, nColIdx, strText); strText.Format(_T("%d"), result.rtDefectRect.right); m_ctrlGridDefectResult.SetItemText(nRowIdx++, nColIdx, strText); strText.Format(_T("%d"), result.rtDefectRect.bottom); m_ctrlGridDefectResult.SetItemText(nRowIdx++, nColIdx, strText); strText.Format(_T("%.3lf"), dLightValue); m_ctrlGridDefectResult.SetItemText(nRowIdx++, nColIdx, strText); m_ctrlGridDefectResult.Invalidate(FALSE); } else { int nColIdx = 1; CString strText = _T(""); for (int i=0; i