// HuaGoCorrectDlg.cpp : 实现文件 // #include "stdafx.h" #include "HuaGoCorrect.h" #include "HuaGoCorrectDlg.h" #include "afxdialogex.h" #include "scn_config.h" #include #include "imageprocess.h" #include "ImageApplyHeaders.h" using namespace std; #ifdef _DEBUG #define new DEBUG_NEW #endif #define N_TIME_SEC 1000 //一秒时间间隔 #define N_TIME_SHOW 200 //0.2s刷新显示 #define N_TIMER_SEC 1 #define N_TIMER_SHOW 2 // 用于应用程序“关于”菜单项的 CAboutDlg 对话框 class CAboutDlg : public CDialogEx { public: CAboutDlg(); // 对话框数据 enum { IDD = IDD_ABOUTBOX }; protected: virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持 // 实现 protected: DECLARE_MESSAGE_MAP() }; CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD) { } void CAboutDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); } BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx) END_MESSAGE_MAP() // CHuaGoCorrectDlg 对话框 CHuaGoCorrectDlg::CHuaGoCorrectDlg(CWnd* pParent /*=NULL*/) : CDialogEx(CHuaGoCorrectDlg::IDD, pParent) ,usb_pid(0x7823) ,usb_vid(0x064b) { m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); papercount = 0; ls_flat = FALSE; m_bExit = FALSE; m_hThread = NULL; m_bPause = TRUE; m_bParamError = FALSE; m_iPicIndex = 0; m_iflatIndex = -2; m_iDpiIndex = 0; m_iColorIndex = 0; bABlackImage = true; bBBlackImage = true; bAGrayWhiteImage = true; bBGrayWhiteImage = true; bAColorWhiteImage = true; bAcolr = true; bAcolg = true; bAcolb = true; bBColorWhiteImage = true; bBcolr = true; bBcolg = true; bBcolb = true; bAGrayWhiteGain = true; bBGrayWhiteGain = true; bAColorWhiteGain = true; bBColorWhiteGain = true; iAMaxStep = 0; iAMiddleStep = 0; iAMinStep = 0; iBMaxStep = 0; iBMiddleStep = 0; iBMinStep = 0; iAERMaxStep = 0; iAERMiddleStep = 0; iAERMinStep = 0; iAEGMaxStep = 0; iAEGMiddleStep = 0; iAEGMinStep = 0; iAEBMaxStep = 0; iAEBMiddleStep = 0; iAEBMinStep = 0; iBERMaxStep = 0; iBERMiddleStep = 0; iBERMinStep = 0; iBEGMaxStep = 0; iBEGMiddleStep = 0; iBEGMinStep = 0; iBEBMaxStep = 0; iBEBMiddleStep = 0; iBEBMinStep = 0; iGainStep = 0; b_review = FALSE; b_suspend = FALSE; } void CHuaGoCorrectDlg::DoDataExchange(CDataExchange* pDX) { CDialogEx::DoDataExchange(pDX); DDX_Control(pDX, IDC_TAB1, m_tab); DDX_Control(pDX, IDC_CHECK_BLACK, m_pBlack); DDX_Control(pDX, IDC_CHECK_WExposure, m_pWExposure); DDX_Control(pDX, IDC_CHECK_WGain, m_pWGain); DDX_Control(pDX, IDC_dpi_comboBox, m_ComboxDpi); DDX_Control(pDX, IDC_color_comboBox, m_ComboxColor); DDX_Control(pDX, IDC_lsFpgaFlat, m_check_FpgaFlat); DDX_Text(pDX, IDC_EDIT_HOUR, s_hour); DDX_Text(pDX, IDC_EDIT_MINUTE, s_minute); DDX_Text(pDX, IDC_EDIT_SECOND, s_second); DDX_Control(pDX, IDC_color_comboBox2, twss); DDX_Control(pDX, IDC_color_comboBox3, duplex); DDX_Control(pDX, IDC_COMBO1, Version); } BEGIN_MESSAGE_MAP(CHuaGoCorrectDlg, CDialogEx) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_NOTIFY(TCN_SELCHANGE, IDC_TAB1, &CHuaGoCorrectDlg::OnTcnSelChangeTab) ON_BN_CLICKED(IDC_CheckParamSet, &CHuaGoCorrectDlg::OnBnClickedCheckparamset) ON_BN_CLICKED(IDC_CheckParamRead, &CHuaGoCorrectDlg::OnBnClickedCheckparamread) ON_BN_CLICKED(IDC_BTN_FLAT, &CHuaGoCorrectDlg::OnBnClickedBtnFlat) ON_BN_CLICKED(IDC_BTN_FLATM, &CHuaGoCorrectDlg::OnBnClickedBtnFlatm) ON_BN_CLICKED(IDC_BTN_BLACKFLAT, &CHuaGoCorrectDlg::OnBnClickedBtnBlackflat) ON_BN_CLICKED(IDC_BTN_EXFLAT, &CHuaGoCorrectDlg::OnBnClickedBtnExflat) ON_BN_CLICKED(IDC_BTN_GAINFLAT, &CHuaGoCorrectDlg::OnBnClickedBtnGainflat) ON_BN_CLICKED(IDC_BTN_CONTINUE, &CHuaGoCorrectDlg::OnBnClickedBtnContinue) ON_BN_CLICKED(IDC_BTN_PAUSE, &CHuaGoCorrectDlg::OnBnClickedBtnPause) ON_CBN_SELCHANGE(IDC_dpi_comboBox, &CHuaGoCorrectDlg::OnCbnSelChangeDpi) ON_CBN_SELCHANGE(IDC_color_comboBox, &CHuaGoCorrectDlg::OnCbnSelChangeColor) ON_BN_CLICKED(IDC_BUTTON1, &CHuaGoCorrectDlg::OnBnClickedConfirm) ON_BN_CLICKED(IDC_BTN_PARAMCFG, &CHuaGoCorrectDlg::OnBnClickedBtnParamcfg) ON_BN_CLICKED(IDC_BUTTON3, &CHuaGoCorrectDlg::OnBnClickedStopScan) ON_WM_TIMER() ON_MESSAGE(WM_MYMESSAGE, &CHuaGoCorrectDlg::OnMyMessage) ON_CBN_SELCHANGE(IDC_COMBO1, &CHuaGoCorrectDlg::OnCbnSelchangeCombo1) END_MESSAGE_MAP() // CHuaGoCorrectDlg 消息处理程序 BOOL CHuaGoCorrectDlg::OnInitDialog() { CDialogEx::OnInitDialog(); this->SetWindowTextA("HuaGaoCorrect"); m_drv.reset(new GScn_Drv()); m_drv->open(usb_vid); int version_num =0; int num = 0; if (m_drv->device_id == 0) MessageBox(TEXT("未找到设备!"), TEXT("提示"), MB_OK | MB_ICONWARNING); Version.InsertString(num++, _T("默认")); Version.InsertString(num++, _T("G100")); //m_tab.InsertItem(2, _T("视图")); Version.InsertString(num++, _T("G200")); Version.InsertString(num++, _T("G300")); Version.InsertString(num++, _T("G400")); for (int q = 0; q < 5; q++) { if ((1 << (q * 4)) & m_drv->device_id) { version_num = q; } } Version.SetCurSel(version_num); //m_drv->open(0x3072, 0x0100,0); // 将“关于...”菜单项添加到系统菜单中。 // IDM_ABOUTBOX 必须在系统命令范围内。 ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX); ASSERT(IDM_ABOUTBOX < 0xF000); CMenu* pSysMenu = GetSystemMenu(FALSE); if (pSysMenu != NULL) { BOOL bNameValid; CString strAboutMenu; bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX); ASSERT(bNameValid); if (!strAboutMenu.IsEmpty()) { pSysMenu->AppendMenu(MF_SEPARATOR); pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu); } } // 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动 // 执行此操作 SetIcon(m_hIcon, TRUE); // 设置大图标 SetIcon(m_hIcon, FALSE); // 设置小图标 // TODO: 在此添加额外的初始化代码 m_tab.InsertItem(0, _T("A3")); m_tab.InsertItem(1, _T("A4")); //m_tab.InsertItem(2, _T("视图")); m_tab.InsertItem(2, _T("CIS检测工具")); m_tab.InsertItem(3, _T("畸变检测")); m_A3Dlg.Create(IDD_A3_DIALOG, &m_tab); // 创建第一个标签页 m_A4Dlg.Create(IDD_A4_DIALOG, &m_tab); // 创建第二个标签页 //m_VisonDlg.Create(IDD_VISION_DIALOG, &m_tab); //创建第三个标签页 m_CISDlg.Create(IDD_CIS_DIALOG1, &m_tab); m_dis.Create(IDD_DIS_DIALOG1, &m_tab); //m_CISDlg.Cis_box.SetCurSel(0); m_tab.GetClientRect(&tabRect); // 获取标签控件客户区Rect // 调整tabRect,使其覆盖范围适合放置标签页 tabRect.left += 1; tabRect.right -= 1; tabRect.top += 25; tabRect.bottom -= 1; // 根据调整好的tabRect放置m_A3Dlg子对话框,并设置为显示 m_A3Dlg.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW); // 根据调整好的tabRect放置m_A4Dlg子对话框,并设置为隐藏 m_A4Dlg.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_SHOWWINDOW); // 根据调整好的tabRect放置m_VisonDlg子对话框,并设置为隐藏 //m_VisonDlg.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_SHOWWINDOW); m_CISDlg.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW); m_dis.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW); m_tab.SetCurSel(1); m_ComboxDpi.InsertString(0, _T("300")); m_ComboxDpi.InsertString(1, _T("200")); m_ComboxDpi.InsertString(2, _T("150")); m_ComboxDpi.SetCurSel(1); twss.InsertString(0, _T("A4")); twss.InsertString(1, _T("A3")); twss.InsertString(2, _T("自动裁剪")); twss.SetCurSel(0); duplex.InsertString(0, _T("单面")); duplex.InsertString(1, _T("双面")); duplex.SetCurSel(0); m_ComboxColor.InsertString(0, _T("gray")); m_ComboxColor.InsertString(1, _T("color")); m_ComboxColor.SetCurSel(1); m_drv->set_decompress_pix_type(TWPT_RGB); m_check_FpgaFlat.SetCheck(0); m_pBlack.SetCheck(0); m_pWExposure.SetCheck(0); m_pWGain.SetCheck(0); m_drv->SetPath(GetMainApp()->path); n_hour = 0; n_minute = 0; n_second = 0; s_hour = "00"; s_minute = "00"; s_second = "00"; UpdateData(FALSE); //InitButton(); //开启校正线程 unsigned threadId; // Create the thread. m_hThread = (HANDLE)::_beginthreadex( NULL, 0, &CorrectThread, this, 0, &threadId); return TRUE; // 除非将焦点设置到控件,否则返回 TRUE } void CHuaGoCorrectDlg::OnSysCommand(UINT nID, LPARAM lParam) { if ((nID & 0xFFF0) == IDM_ABOUTBOX) { CAboutDlg dlgAbout; dlgAbout.DoModal(); } else { CDialogEx::OnSysCommand(nID, lParam); } } // 如果向对话框添加最小化按钮,则需要下面的代码 // 来绘制该图标。对于使用文档/视图模型的 MFC 应用程序, // 这将由框架自动完成。 void CHuaGoCorrectDlg::OnPaint() { if (IsIconic()) { CPaintDC dc(this); // 用于绘制的设备上下文 SendMessage(WM_ICONERASEBKGND, reinterpret_cast(dc.GetSafeHdc()), 0); // 使图标在工作区矩形中居中 int cxIcon = GetSystemMetrics(SM_CXICON); int cyIcon = GetSystemMetrics(SM_CYICON); CRect rect; GetClientRect(&rect); int x = (rect.Width() - cxIcon + 1) / 2; int y = (rect.Height() - cyIcon + 1) / 2; // 绘制图标 dc.DrawIcon(x, y, m_hIcon); } else { CDialogEx::OnPaint(); } } //当用户拖动最小化窗口时系统调用此函数取得光标 //显示。 HCURSOR CHuaGoCorrectDlg::OnQueryDragIcon() { return static_cast(m_hIcon); } unsigned WINAPI CHuaGoCorrectDlg::CorrectThread(void* pCorrect) { CHuaGoCorrectDlg *pDlg = (CHuaGoCorrectDlg *)pCorrect; if (pDlg != NULL) { pDlg->CorrectThreadFunc(); } return 0; } void CHuaGoCorrectDlg::CorrectThreadFunc() { BOOL bNewConnect = FALSE; //是否一个新连接 while (!m_bExit) { m_deviceLock.Lock(); if(true != m_bPause) { m_drv->FlatA4(); Sleep(28000); if(1 == m_pBlack.GetCheck()) { if(1 == m_pWExposure.GetCheck()) { if(0 == m_pWGain.GetCheck()) { CorrectWhiteGain(); } else { m_bPause = true; } } else { CorrectWhiteImage(); } } else { CorrectBlackImage(); } } m_deviceLock.Unlock(); } } BOOL CHuaGoCorrectDlg::PreCreateWindow(CREATESTRUCT & cs) { cs.style = cs.style&~WS_MAXIMIZEBOX&~WS_SYSMENU&~WS_MINIMIZEBOX; if (!CDialogEx::PreCreateWindow(cs)) return FALSE; // TODO: Modify the Window class or styles here by modifying // the CREATESTRUCT cs return TRUE; } void CHuaGoCorrectDlg::OnTcnSelChangeTab(NMHDR *pNMHDR, LRESULT *pResult) { // TODO: 在此添加控件通知处理程序代码 *pResult = 0; RefreshTabChange(); } void CHuaGoCorrectDlg::RefreshTabChange() { CRect tabRect; // 标签控件客户区的Rect // 获取标签控件客户区Rect,并对其调整,以适合放置标签页 m_tab.GetClientRect(&tabRect); tabRect.left += 1; tabRect.right -= 1; tabRect.top += 25; tabRect.bottom -= 1; int currentselect = m_tab.GetCurSel(); switch (currentselect) { case 0: m_A3Dlg.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_SHOWWINDOW); m_A4Dlg.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW); //m_VisonDlg.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW); m_CISDlg.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW); m_dis.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW); break; case 1: //m_check_FpgaFlat.SetCheck(1); m_A3Dlg.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW); m_A4Dlg.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_SHOWWINDOW); //m_VisonDlg.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW); m_CISDlg.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW); m_dis.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW); break; //case 2: // m_A3Dlg.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW); // m_A4Dlg.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW); // m_VisonDlg.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_SHOWWINDOW); // m_CISDlg.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW); // m_dis.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW); // break; case 2: m_A3Dlg.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW); m_A4Dlg.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW); //m_VisonDlg.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW); m_CISDlg.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_SHOWWINDOW); m_dis.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW); m_CISDlg.SetGscan_drv(m_drv.get()); break; case 3: m_A3Dlg.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW); m_A4Dlg.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW); //m_VisonDlg.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW); m_CISDlg.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_HIDEWINDOW); m_dis.SetWindowPos(NULL, tabRect.left, tabRect.top, tabRect.Width(), tabRect.Height(), SWP_SHOWWINDOW); m_dis.setgcn_drv(m_drv.get()); break; default: break; } m_CISDlg.SetEnableGetImage(currentselect == 2); m_dis.SetEnableGetImage(currentselect == 3); } void CHuaGoCorrectDlg::Scan() { hgConfigClass cf; CONFIGPARAMS configItem; if(m_iColorIndex == 0) { cf.setTwPixelType(TWPT_GRAY); configItem.Pixtype = TWPT_GRAY; } else { cf.setTwPixelType(TWPT_RGB); configItem.Pixtype = TWPT_RGB; } if (twss.GetCurSel() == 0) { cf.settwSS(TWSS_A3); configItem.PaperSize = A3; } else if(twss.GetCurSel()==1) { cf.settwSS(TWSS_A4); configItem.PaperSize = A4; } else { cf.settwSS(TWSS_A4); configItem.PaperSize = USStatement; } if(m_ComboxDpi.GetCurSel() == 0) { cf.setResolution(300.0); configItem.Resolution = 300; } else if(m_ComboxDpi.GetCurSel() == 1) { cf.setResolution(200.0); configItem.Resolution = 200; } else { cf.setResolution(150.0); configItem.Resolution = 150; } cf.setDoubleFeedEnable(FALSE); cf.setStapleEnable(FALSE); configItem.Duplex = 0; if(0 == m_check_FpgaFlat.GetCheck()) { cf.setIsConrrect(TRUE); } else { cf.setIsConrrect(FALSE); } bool b_save_origin = ((CButton*)(GetDlgItem(IDC_CHECK3)))->GetCheck() == 1; bool b_save_origin_fixed = ((CButton*)(GetDlgItem(IDC_CHECK4)))->GetCheck() == 1; m_drv->save_config(b_save_origin, b_save_origin_fixed); UpdateList(configItem, true); m_drv->setlist(m_iaList); m_dis.updatadistorionparam(); m_dis.d_distortonoaram = m_dis.getdistorionparam(); UINT32 cfg_Value =cf.GetData(); USBCB usbcb = { CONFIGURED_DATA , cfg_Value,0 }; m_drv->Config_Scanner(&usbcb); BOOL isduplex = duplex.GetCurSel(); m_CISDlg.isduplex = isduplex; m_drv->SetIsDuplex(isduplex); Sleep(2000); m_drv->Scanner_StartScan(0); if (b_review||b_suspend) KillTimer(N_TIMER_SEC); b_review = FALSE; b_suspend = FALSE; n_hour = 0; n_minute = 0; n_second = 0; SetTimer(N_TIMER_SEC, N_TIME_SEC, NULL); SetTimer(N_TIMER_SHOW, N_TIME_SHOW, NULL); } static map, CSize> dpiDct; static void initialDictionary() { //A3 dpiDct.insert(pair, CSize>(pair(A3, 100), CSize(1169, 1653))); dpiDct.insert(pair, CSize>(pair(A3, 150), CSize(1753, 2480))); dpiDct.insert(pair, CSize>(pair(A3, 200), CSize(2338, 3307))); dpiDct.insert(pair, CSize>(pair(A3, 240), CSize(2806, 3968))); dpiDct.insert(pair, CSize>(pair(A3, 300), CSize(3507, 4960))); //A4 dpiDct.insert(pair, CSize>(pair(A4, 100), CSize(826, 1169))); dpiDct.insert(pair, CSize>(pair(A4, 150), CSize(1240, 1753))); dpiDct.insert(pair, CSize>(pair(A4, 200), CSize(1653, 2338))); dpiDct.insert(pair, CSize>(pair(A4, 240), CSize(1984, 2806))); dpiDct.insert(pair, CSize>(pair(A4, 300), CSize(2480, 3507))); //1.5倍A3 dpiDct.insert(pair, CSize>(pair(USStatement, 100), CSize(1169, (LONG)(1653 * 1.5)))); dpiDct.insert(pair, CSize>(pair(USStatement, 150), CSize(1753, (LONG)(2480 * 1.5)))); dpiDct.insert(pair, CSize>(pair(USStatement, 200), CSize(2338, (LONG)(3307 * 1.5)))); dpiDct.insert(pair, CSize>(pair(USStatement, 240), CSize(2806, (LONG)(3968 * 1.5)))); dpiDct.insert(pair, CSize>(pair(USStatement, 300), CSize(3507, (LONG)(4960 * 1.5)))); /*dpiDct[{USStatement, 50.0f}] = { 585, (LONG)(827 * 1.5) }; dpiDct[{USStatement, 75.0f}] = { 877, (LONG)(1240 * 1.5) }; dpiDct[{USStatement, 100.0f}] = { 1169, (LONG)(1653 * 1.5) }; dpiDct[{USStatement, 150.0f}] = { 1753, (LONG)(2480 * 1.5) }; dpiDct[{USStatement, 200.0f}] = { 2338, (LONG)(3307 * 1.5) }; dpiDct[{USStatement, 240.0f}] = { 2806, (LONG)(3968 * 1.5) }; dpiDct[{USStatement, 300.0f}] = { 3507, (LONG)(4960 * 1.5) }; dpiDct[{USStatement, 400.0f}] = { 4677, (LONG)(6614 * 1.5) }; dpiDct[{USStatement, 600.0f}] = { 7015, (LONG)(9921 * 1.5) };*/ } static CSize getSize(TwSS paperType, float dpi) { CSize retSize; map, CSize>::iterator iter; iter = dpiDct.find(pair(paperType, dpi)); if (iter != dpiDct.end()) { retSize = (*iter).second; return retSize; } return CSize(2338, 3307); } void CHuaGoCorrectDlg::UpdateList(CONFIGPARAMS configParams, bool canUpdate) { m_iaList.clear(); CSize fixedSize = getSize((TwSS)configParams.PaperSize, 200.0f); bool autocrop = (TwSS)configParams.PaperSize == TwSS::USStatement; m_iaList.push_back(std::shared_ptr(new CImageApplyAutoCrop(true, true, true, cv::Size(fixedSize.cx, fixedSize.cy), true))); if (configParams.Pixtype != 0) { m_iaList.push_back(std::shared_ptr(new CImageApplySharpen())); } if (configParams.Pixtype == 0) //threshold m_iaList.push_back(std::shared_ptr(new CImageApplyBWBinaray(CImageApplyBWBinaray::THRESH_BINARY))); if (configParams.Resolution != 200.0) { CImageApplyResize* apply; if (true) { double ratio = configParams.Resolution / 200.0; apply = new CImageApplyResize(CImageApplyResize::RATIO, cv::Size(0, 0), ratio, ratio); } else { CSize dSize = getSize((TwSS)configParams.PaperSize, configParams.Resolution); apply = new CImageApplyResize(CImageApplyResize::DSIZE, cv::Size(dSize.cx, dSize.cy), 1.0, 1.0); } m_iaList.push_back(std::shared_ptr< CImageApply>(apply)); } } void CHuaGoCorrectDlg::OnBnClickedCheckparamset() { // TODO: 在此添加控件通知处理程序代码 if (!m_drv->IsConnected()) { MessageBox("扫描仪未连接!"); return; } int iSel = m_tab.GetCurSel(); if(iSel == 0) { A3ParamSet(); } else { //A4ParamSet(); CorrectCMDUpdate(); } } void CHuaGoCorrectDlg::OnBnClickedCheckparamread() { // TODO: 在此添加控件通知处理程序代码 if (!m_drv->IsConnected()) { MessageBox("扫描仪未连接!"); return; } if (m_tab.GetCurSel() == 1) { try { int offset = 0; UINT iDes[128] = {0}; byte bValue[512] = {0}; byte *read = m_drv->GetFlatData(); for(int i = 0; i < 512; i++) { bValue[i] = read[i]; } for (int j = 0; j < 128; j++) { int value = (int)((bValue[offset+0] & 0xFF) | ((bValue[offset + 1] & 0xFF) << 8) | ((bValue[offset + 2] & 0xFF) << 16) | ((bValue[offset + 3] & 0xFF) << 24)); iDes[j] = value; offset += 4; } int flatType = m_A4Dlg.m_A4FlatModel.GetCurSel(); int startindex = -1; switch (flatType) { case 0://彩色平场校正0~29 startindex = 3; break; case 1://彩色校正30~59 startindex = 63; break; case 2://灰度平场校正60~89 startindex = 33; break; case 3://灰度校正90~120 startindex = 93; break; default: break; } int iValues[30] = {0}; int j = 0; for(int i = startindex; i < startindex+30; i++) { iValues[j] = iDes[i]; j++; } if (startindex!=-1) { m_A4Dlg.updateA4Config(iValues); } } catch (Exception) { throw; } } else { byte *buffer = m_drv->GetCisPara(); byte bValue[30] = {0}; for(int i = 0; i < 30; i++) { bValue[i] = buffer[i]; } //m_A3Dlg.updateA3Config(bValue); } } void CHuaGoCorrectDlg::OnBnClickedBtnFlat() { // TODO: 在此添加控件通知处理程序代码 m_iflatIndex = -2; ((CButton*)GetDlgItem(IDC_CheckParamSet))->EnableWindow(FALSE); ((CButton*)GetDlgItem(IDC_CheckParamRead))->EnableWindow(FALSE); ((CButton*)GetDlgItem(IDC_BTN_FLATM))->EnableWindow(FALSE); ((CButton*)GetDlgItem(IDC_BTN_BLACKFLAT))->EnableWindow(FALSE); ((CButton*)GetDlgItem(IDC_BTN_EXFLAT))->EnableWindow(FALSE); ((CButton*)GetDlgItem(IDC_BTN_GAINFLAT))->EnableWindow(FALSE); ((CButton*)GetDlgItem(IDC_BTN_FLAT))->EnableWindow(FALSE); ((CButton*)GetDlgItem(IDC_BTN_CONTINUE))->EnableWindow(FALSE); ((CButton*)GetDlgItem(IDC_BUTTON1))->EnableWindow(FALSE); ((CButton*)GetDlgItem(IDC_BTN_PARAMCFG))->EnableWindow(FALSE); ((CButton*)GetDlgItem(IDC_BTN_PAUSE))->EnableWindow(TRUE); if (!m_drv->IsConnected()) { MessageBox("扫描仪未连接!"); return; } if (m_tab.GetCurSel() == 1) { if(m_bParamError == true) { m_drv->reset(); m_bParamError = false; } else { m_drv->reset(); m_drv->DevStateChange(); } //m_drv->FlatA4(); //Sleep(28000); //m_iflatIndex += 2; m_bPause = false; //ShowFrontImage(m_iflatIndex); //Sleep(500); //m_iflatIndex += 2; //ShowFrontImage(m_iflatIndex); //CorrectBlackImage(m_iflatIndex); //MessageBox("校正完成"); } else { /* if(1 == m_A3Dlg.m_200dpi_gray.GetCheck()) { m_drv->FlatA3(0x40); Sleep(2000); m_drv->Stop_scan(); Sleep(1000); m_iflatIndex += 2; ShowFrontImage(m_iflatIndex); Sleep(500); m_iflatIndex += 2; ShowFrontImage(m_iflatIndex); MessageBox("校正完成"); m_drv->DevStateChange(); } if(1 == m_A3Dlg.m_200dpi_color.GetCheck()) { m_drv->FlatA3(0x60); Sleep(2000); m_drv->Stop_scan(); Sleep(1000); m_iflatIndex += 2; ShowFrontImage(m_iflatIndex); Sleep(500); m_iflatIndex += 2; ShowFrontImage(m_iflatIndex); MessageBox("校正完成"); m_drv->DevStateChange(); } if(1 == m_A3Dlg.m_300dpi_gray.GetCheck()) { m_drv->FlatA3(0x00); Sleep(2000); m_drv->Stop_scan(); Sleep(1000); m_iflatIndex += 2; ShowFrontImage(m_iflatIndex); Sleep(500); m_iflatIndex += 2; ShowFrontImage(m_iflatIndex); MessageBox("校正完成"); m_drv->DevStateChange(); } if(1 == m_A3Dlg.m_300dpi_color.GetCheck()) { m_drv->FlatA3(0x20); Sleep(2000); m_drv->Stop_scan(); Sleep(1000); m_iflatIndex += 2; ShowFrontImage(m_iflatIndex); Sleep(500); m_iflatIndex += 2; ShowFrontImage(m_iflatIndex); MessageBox("校正完成"); m_drv->DevStateChange(); } */ } } void CHuaGoCorrectDlg::A3ParamSet() { CString csParam; /* UINT adpara = m_A3Dlg.m_gray_gain_f; adpara = (adpara | (m_A3Dlg.m_gray_gain_b << 8)); adpara = (adpara | (m_A3Dlg.m_gray_offset_f << 16)); adpara = (adpara | (m_A3Dlg.m_gray_offset_b << 24)); m_drv->SendrAdPara(adpara); Sleep(500); UINT Rgbadpara = m_A3Dlg.m_rgb_gain_f; Rgbadpara = (Rgbadpara | (m_A3Dlg.m_rgb_gain_b << 8)); Rgbadpara = (Rgbadpara | (m_A3Dlg.m_rgb_offset_f << 16)); Rgbadpara = (Rgbadpara | (m_A3Dlg.m_rgb_offset_b << 24)); m_drv->SendrRgbAdPara(Rgbadpara); Sleep(500); //SenGRPara(0x011000a0); UINT GRtimepara = ((m_A3Dlg.m_Redtime << 16) | m_A3Dlg.m_Graytime); m_drv->SenGRPara(GRtimepara); Sleep(500); //SenGBPara(0x01ba0215); UINT GBtimepara = ((m_A3Dlg.m_Bluetime << 16) | m_A3Dlg.m_Greentime); m_drv->SenGBPara(GBtimepara); MessageBox("参数发送成功"); */ } void CHuaGoCorrectDlg::A4ParamSet() { if (!m_drv->IsConnected()) { MessageBox("扫描仪未连接!"); return; } switch (m_A4Dlg.m_A4FlatModel.GetCurSel()) { case 0: { UINT gains[30] = {0}; byte gain[512] = {0}; byte gain_data[524] = {0}; m_A4Dlg.UpdateData(TRUE); gains[0] = m_A4Dlg.m_tbxFRExposure; gains[1] = m_A4Dlg.m_tbxFGExposure; gains[2] = m_A4Dlg.m_tbxFBExposure; gains[3] = m_A4Dlg.m_tbxBRExposure; gains[4] = m_A4Dlg.m_tbxBGExposure; gains[5] = m_A4Dlg.m_tbxBBExposure; gains[6] = m_A4Dlg.m_tbxF1Gain; gains[7] = m_A4Dlg.m_tbxF2Gain; gains[8] = m_A4Dlg.m_tbxF3Gain; gains[9] = m_A4Dlg.m_tbxF4Gain; gains[10] = m_A4Dlg.m_tbxF5Gain; gains[11] = m_A4Dlg.m_tbxF6Gain; gains[12] = m_A4Dlg.m_tbxB1Gain; gains[13] = m_A4Dlg.m_tbxB2Gain; gains[14] = m_A4Dlg.m_tbxB3Gain; gains[15] = m_A4Dlg.m_tbxB4Gain; gains[16] = m_A4Dlg.m_tbxB5Gain; gains[17] = m_A4Dlg.m_tbxB6Gain; gains[18] = m_A4Dlg.m_tbxF1Offset; gains[19] = m_A4Dlg.m_tbxF2Offset; gains[20] = m_A4Dlg.m_tbxF3Offset; gains[21] = m_A4Dlg.m_tbxF4Offset; gains[22] = m_A4Dlg.m_tbxF5Offset; gains[23] = m_A4Dlg.m_tbxF6Offset; gains[24] = m_A4Dlg.m_tbxB1Offset; gains[25] = m_A4Dlg.m_tbxB2Offset; gains[26] = m_A4Dlg.m_tbxB3Offset; gains[27] = m_A4Dlg.m_tbxB4Offset; gains[28] = m_A4Dlg.m_tbxB5Offset; gains[29] = m_A4Dlg.m_tbxB6Offset; m_A4Dlg.UpdateData(FALSE); intToByte(gains, gain, 30); USBCBA4 ubc; ubc.u32_Command = SEND_COLORCORRECT_FLAT; ubc.u32_Count = 120; memcpy(ubc.buffer,gain,512); ubc.u32_Data = 0; int length = sizeof(ubc); memmove(gain_data,&ubc,length); m_drv->SendColorCorrentFlat(gain_data,length); } break; case 1: { UINT gains[30] = {0}; byte gain[512] = {0}; byte gain_data[524] = {0}; m_A4Dlg.UpdateData(TRUE); gains[0] = m_A4Dlg.m_tbxFRExposure; gains[1] = m_A4Dlg.m_tbxFGExposure; gains[2] = m_A4Dlg.m_tbxFBExposure; gains[3] = m_A4Dlg.m_tbxBRExposure; gains[4] = m_A4Dlg.m_tbxBGExposure; gains[5] = m_A4Dlg.m_tbxBBExposure; gains[6] = m_A4Dlg.m_tbxF1Gain; gains[7] = m_A4Dlg.m_tbxF2Gain; gains[8] = m_A4Dlg.m_tbxF3Gain; gains[9] = m_A4Dlg.m_tbxF4Gain; gains[10] = m_A4Dlg.m_tbxF5Gain; gains[11] = m_A4Dlg.m_tbxF6Gain; gains[12] = m_A4Dlg.m_tbxB1Gain; gains[13] = m_A4Dlg.m_tbxB2Gain; gains[14] = m_A4Dlg.m_tbxB3Gain; gains[15] = m_A4Dlg.m_tbxB4Gain; gains[16] = m_A4Dlg.m_tbxB5Gain; gains[17] = m_A4Dlg.m_tbxB6Gain; gains[18] = m_A4Dlg.m_tbxF1Offset; gains[19] = m_A4Dlg.m_tbxF2Offset; gains[20] = m_A4Dlg.m_tbxF3Offset; gains[21] = m_A4Dlg.m_tbxF4Offset; gains[22] = m_A4Dlg.m_tbxF5Offset; gains[23] = m_A4Dlg.m_tbxF6Offset; gains[24] = m_A4Dlg.m_tbxB1Offset; gains[25] = m_A4Dlg.m_tbxB2Offset; gains[26] = m_A4Dlg.m_tbxB3Offset; gains[27] = m_A4Dlg.m_tbxB4Offset; gains[28] = m_A4Dlg.m_tbxB5Offset; gains[29] = m_A4Dlg.m_tbxB6Offset; m_A4Dlg.UpdateData(FALSE); intToByte(gains, gain, 30); USBCBA4 ubcColor; ubcColor.u32_Command = SEND_COLOR_FLAT; ubcColor.u32_Count = 120; memcpy(ubcColor.buffer,gain,512); ubcColor.u32_Data = 0; int length = sizeof(ubcColor); memmove(gain_data,&ubcColor,length); m_drv->SendColorFlat(gain_data,length); } break; case 2: { UINT gains[30] = {0}; byte gain[512] = {0}; byte gain_data[524] = {0}; m_A4Dlg.UpdateData(TRUE); gains[0] = m_A4Dlg.m_tbxFRExposure; gains[1] = m_A4Dlg.m_tbxFGExposure; gains[2] = m_A4Dlg.m_tbxFBExposure; gains[3] = m_A4Dlg.m_tbxBRExposure; gains[4] = m_A4Dlg.m_tbxBGExposure; gains[5] = m_A4Dlg.m_tbxBBExposure; gains[6] = m_A4Dlg.m_tbxF1Gain; gains[7] = m_A4Dlg.m_tbxF2Gain; gains[8] = m_A4Dlg.m_tbxF3Gain; gains[9] = m_A4Dlg.m_tbxF4Gain; gains[10] = m_A4Dlg.m_tbxF5Gain; gains[11] = m_A4Dlg.m_tbxF6Gain; gains[12] = m_A4Dlg.m_tbxB1Gain; gains[13] = m_A4Dlg.m_tbxB2Gain; gains[14] = m_A4Dlg.m_tbxB3Gain; gains[15] = m_A4Dlg.m_tbxB4Gain; gains[16] = m_A4Dlg.m_tbxB5Gain; gains[17] = m_A4Dlg.m_tbxB6Gain; gains[18] = m_A4Dlg.m_tbxF1Offset; gains[19] = m_A4Dlg.m_tbxF2Offset; gains[20] = m_A4Dlg.m_tbxF3Offset; gains[21] = m_A4Dlg.m_tbxF4Offset; gains[22] = m_A4Dlg.m_tbxF5Offset; gains[23] = m_A4Dlg.m_tbxF6Offset; gains[24] = m_A4Dlg.m_tbxB1Offset; gains[25] = m_A4Dlg.m_tbxB2Offset; gains[26] = m_A4Dlg.m_tbxB3Offset; gains[27] = m_A4Dlg.m_tbxB4Offset; gains[28] = m_A4Dlg.m_tbxB5Offset; gains[29] = m_A4Dlg.m_tbxB6Offset; m_A4Dlg.UpdateData(FALSE); intToByte(gains, gain, 30); USBCBA4 ubcGrayC; ubcGrayC.u32_Command = SEND_GRAYCORRECT_FLAT; ubcGrayC.u32_Count = 120; memcpy(ubcGrayC.buffer,gain,512); ubcGrayC.u32_Data = 0; int length = sizeof(ubcGrayC); memmove(gain_data,&ubcGrayC,length); m_drv->SendGrayCorrectFlat(gain_data,length); } break; case 3: { UINT gains[30] = {0}; byte gain[512] = {0}; byte gain_data[524] = {0}; m_A4Dlg.UpdateData(TRUE); gains[0] = m_A4Dlg.m_tbxFRExposure; gains[1] = m_A4Dlg.m_tbxFGExposure; gains[2] = m_A4Dlg.m_tbxFBExposure; gains[3] = m_A4Dlg.m_tbxBRExposure; gains[4] = m_A4Dlg.m_tbxBGExposure; gains[5] = m_A4Dlg.m_tbxBBExposure; gains[6] = m_A4Dlg.m_tbxF1Gain; gains[7] = m_A4Dlg.m_tbxF2Gain; gains[8] = m_A4Dlg.m_tbxF3Gain; gains[9] = m_A4Dlg.m_tbxF4Gain; gains[10] = m_A4Dlg.m_tbxF5Gain; gains[11] = m_A4Dlg.m_tbxF6Gain; gains[12] = m_A4Dlg.m_tbxB1Gain; gains[13] = m_A4Dlg.m_tbxB2Gain; gains[14] = m_A4Dlg.m_tbxB3Gain; gains[15] = m_A4Dlg.m_tbxB4Gain; gains[16] = m_A4Dlg.m_tbxB5Gain; gains[17] = m_A4Dlg.m_tbxB6Gain; gains[18] = m_A4Dlg.m_tbxF1Offset; gains[19] = m_A4Dlg.m_tbxF2Offset; gains[20] = m_A4Dlg.m_tbxF3Offset; gains[21] = m_A4Dlg.m_tbxF4Offset; gains[22] = m_A4Dlg.m_tbxF5Offset; gains[23] = m_A4Dlg.m_tbxF6Offset; gains[24] = m_A4Dlg.m_tbxB1Offset; gains[25] = m_A4Dlg.m_tbxB2Offset; gains[26] = m_A4Dlg.m_tbxB3Offset; gains[27] = m_A4Dlg.m_tbxB4Offset; gains[28] = m_A4Dlg.m_tbxB5Offset; gains[29] = m_A4Dlg.m_tbxB6Offset; m_A4Dlg.UpdateData(FALSE); intToByte(gains, gain, 30); USBCBA4 ubcGray; ubcGray.u32_Command = SEND_GRAY_FLAT; ubcGray.u32_Count = 120; memcpy(ubcGray.buffer,gain,512); ubcGray.u32_Data = 0; int length = sizeof(ubcGray); memmove(gain_data,&ubcGray,length); m_drv->SendGrayFlat(gain_data,length); } break; default: break; } } //int转byte void CHuaGoCorrectDlg::intToByte(UINT *src,byte *bytes,int iLength) { int offset = 0; for (int i = 0; i < iLength; i++) { bytes[offset + 3] = (byte)((src[i] >> 24) & 0xFF); bytes[offset + 2] = (byte)((src[i] >> 16) & 0xFF); bytes[offset + 1] = (byte)((src[i] >> 8) & 0xFF); bytes[offset + 0] = (byte)(src[i] & 0xFF); offset += 4; } } //byte转int void CHuaGoCorrectDlg::bytesToInt(byte* bytes,UINT *des, int iLength) { UINT iTemp[128] = {0}; int offset = 0; for (int i = 0; i < iLength; i++) { int value = (int)((bytes[offset+0] & 0xFF) | ((bytes[offset + 1] & 0xFF) << 8) | ((bytes[offset + 2] & 0xFF) << 16) | ((bytes[offset + 3] & 0xFF) << 24)); iTemp[i] = value; offset += 4; } memcpy(des,iTemp,128); return; } int CHuaGoCorrectDlg::Mat2CImage(Mat *mat, CImage &img) { if (!mat || mat->empty()) return -1; int nBPP = mat->channels() * 8; img.Create(mat->cols, mat->rows, nBPP); if (nBPP == 8) { static RGBQUAD pRGB[256]; for (int i = 0; i < 256; i++) pRGB[i].rgbBlue = pRGB[i].rgbGreen = pRGB[i].rgbRed = i; img.SetColorTable(0, 256, pRGB); } uchar* psrc = mat->data; uchar* pdst = (uchar*)img.GetBits(); int imgPitch = img.GetPitch(); for (int y = 0; y < mat->rows; y++) { memcpy(pdst, psrc, mat->cols*mat->channels());//mat->step is incorrect for those images created by roi (sub-images!) psrc += mat->step; pdst += imgPitch; } return 0; } static int Bcycle = 0; static int WEcycle = 0; static int WGcycle = 0; void CHuaGoCorrectDlg::CorrectBlackImage() { cv::Mat mPicFrontImage; cv::Mat mPicBackImage; cv::Mat mPicImage; Bcycle++; CString csCycle; csCycle.Format("循环处理第%d次", Bcycle); GetDlgItem(IDC_STATIC_BLACK)->SetWindowText(csCycle); int ret = m_drv->aquire_image(mPicImage,0); if (ret) { XdPrint("Failed - could not acquire image"); return; } if (mPicImage.empty()) { XdPrint("Failed - could not acquire image"); return; } mPicFrontImage = mPicImage(cv::Rect(0,0,mPicImage.cols/2,mPicImage.rows)).clone(); mPicBackImage = mPicImage(cv::Rect(mPicImage.cols/2,0,mPicImage.cols/2,mPicImage.rows)).clone(); vector rf; vector gf; vector bf; vector rb; vector gb; vector bb; int nSizef = 0; int nCountf = 0;//统计0出现的次数 int maxValuef = 0; //最大值 int minValuef = 0; //最小值 int sumf = 0; double meanf = 0.0; int iAAddStep = 0; int iAPlusStep = 0; if(bABlackImage) { histogram_bit32(mPicFrontImage.data,mPicFrontImage.rows,mPicFrontImage.cols,rf,gf,bf); nSizef = rf.size(); nCountf = count(rf.begin(),rf.end(),0);//统计0出现的次数 /* maxValuef = (int)*max_element(rf.begin(),rf.end()); //最大值 minValuef = (int)*min_element(rf.begin(),rf.end()); //最小值 sumf = accumulate(rf.begin(), rf.end(), 0); meanf = sumf / rf.size(); //均值 */ if(nCountf > 10) { iAMinStep = iAMiddleStep; iAAddStep = iAMinStep + (iAMaxStep - iAMinStep)/2; m_A4Dlg.m_sFlatCorrection.ColorCorrection[9] = iAAddStep; m_A4Dlg.m_sFlatCorrection.ColorCorrection[10] = iAAddStep; m_A4Dlg.m_sFlatCorrection.ColorCorrection[11] = iAAddStep; m_A4Dlg.m_sFlatCorrection.ColorCorrection[12] = iAAddStep; m_A4Dlg.m_sFlatCorrection.ColorCorrection[13] = iAAddStep; m_A4Dlg.m_sFlatCorrection.ColorCorrection[14] = iAAddStep; m_A4Dlg.m_sFlatCorrection.GrayCorrection[9] = iAAddStep; m_A4Dlg.m_sFlatCorrection.GrayCorrection[10] = iAAddStep; m_A4Dlg.m_sFlatCorrection.GrayCorrection[11] = iAAddStep; m_A4Dlg.m_sFlatCorrection.GrayCorrection[12] = iAAddStep; m_A4Dlg.m_sFlatCorrection.GrayCorrection[13] = iAAddStep; m_A4Dlg.m_sFlatCorrection.GrayCorrection[14] = iAAddStep; if(iAAddStep != iAMiddleStep) { iAMiddleStep = iAAddStep; } else { CString csMessage; csMessage.Format("暗场A面参数需要调整,0值出现次数%d,最大值为%d",nCountf,iAMaxStep); MessageBox(csMessage); if(m_bParamError != true) { InitButton(); m_bPause = true; m_bParamError = true; Bcycle = 0; return; } } } else if(nCountf == 0) { iAMaxStep = iAMiddleStep; iAPlusStep = (iAMaxStep - (iAMaxStep - iAMinStep)/2); m_A4Dlg.m_sFlatCorrection.ColorCorrection[9] = iAPlusStep; m_A4Dlg.m_sFlatCorrection.ColorCorrection[10] = iAPlusStep; m_A4Dlg.m_sFlatCorrection.ColorCorrection[11] = iAPlusStep; m_A4Dlg.m_sFlatCorrection.ColorCorrection[12] = iAPlusStep; m_A4Dlg.m_sFlatCorrection.ColorCorrection[13] = iAPlusStep; m_A4Dlg.m_sFlatCorrection.ColorCorrection[14] = iAPlusStep; m_A4Dlg.m_sFlatCorrection.GrayCorrection[9] = iAPlusStep; m_A4Dlg.m_sFlatCorrection.GrayCorrection[10] = iAPlusStep; m_A4Dlg.m_sFlatCorrection.GrayCorrection[11] = iAPlusStep; m_A4Dlg.m_sFlatCorrection.GrayCorrection[12] = iAPlusStep; m_A4Dlg.m_sFlatCorrection.GrayCorrection[13] = iAPlusStep; m_A4Dlg.m_sFlatCorrection.GrayCorrection[14] = iAPlusStep; if(iAPlusStep != iAMiddleStep) { iAMiddleStep = iAPlusStep; } else { CString csMessage; csMessage.Format("暗场A面参数需要调整,0值出现次数%d,最小值为%d",nCountf,iAPlusStep); MessageBox(csMessage); if(m_bParamError != true) { InitButton(); m_bPause = true; m_bParamError = true; Bcycle = 0; return; } } } else { bABlackImage = false; } CString csABlack; csABlack.Format("%d---%d", nCountf,m_A4Dlg.m_sFlatCorrection.GrayCorrection[9]); GetDlgItem(IDC_STATIC_AOFFSET)->SetWindowText(csABlack); } int nSizeb = 0; int nCountb = 0;//统计100出现的次 int maxValueb = 0; //最大值 int minValueb = 0; //最小值 int sumb = 0; double meanb = 0.0; //均值 int iBAddStep = 0; int iBPlusStep = 0; if(bBBlackImage) { //WriteLog("处理背面图片"); histogram_bit32(mPicBackImage.data,mPicBackImage.rows,mPicBackImage.cols,rb,gb,bb); nSizeb = rb.size(); nCountb = count(rb.begin(),rb.end(),0);//统计100出现的次 /* maxValueb = (int)*max_element(rb.begin(),rb.end()); //最大值 minValueb = (int)*min_element(rb.begin(),rb.end()); //最小值 sumb = accumulate(rb.begin(), rb.end(), 0); meanb = sumb / rb.size(); //均值 */ //WriteLog("调整背面偏置"); if(nCountb > 10) { iBMinStep = iBMiddleStep; iBAddStep = (iBMinStep + (iBMaxStep - iBMinStep)/2); m_A4Dlg.m_sFlatCorrection.ColorCorrection[24] = iBAddStep; m_A4Dlg.m_sFlatCorrection.ColorCorrection[25] = iBAddStep; m_A4Dlg.m_sFlatCorrection.ColorCorrection[26] = iBAddStep; m_A4Dlg.m_sFlatCorrection.ColorCorrection[27] = iBAddStep; m_A4Dlg.m_sFlatCorrection.ColorCorrection[28] = iBAddStep; m_A4Dlg.m_sFlatCorrection.ColorCorrection[29] = iBAddStep; m_A4Dlg.m_sFlatCorrection.GrayCorrection[24] = iBAddStep; m_A4Dlg.m_sFlatCorrection.GrayCorrection[25] = iBAddStep; m_A4Dlg.m_sFlatCorrection.GrayCorrection[26] = iBAddStep; m_A4Dlg.m_sFlatCorrection.GrayCorrection[27] = iBAddStep; m_A4Dlg.m_sFlatCorrection.GrayCorrection[28] = iBAddStep; m_A4Dlg.m_sFlatCorrection.GrayCorrection[29] = iBAddStep; if(iBAddStep != iBMiddleStep) { iBMiddleStep = iBAddStep; } else { CString csMessage; csMessage.Format("暗场B面参数需要调整,0值出现次数%d,最大值为%d",nCountb,iBMaxStep); MessageBox(csMessage); if(m_bParamError != true) { InitButton(); m_bPause = true; m_bParamError = true; Bcycle = 0; return; } } } else if(nCountb == 0) { iBMaxStep = iBMiddleStep; iBPlusStep = iBMaxStep - (iBMaxStep - iBMinStep)/2; m_A4Dlg.m_sFlatCorrection.ColorCorrection[24] = iBPlusStep; m_A4Dlg.m_sFlatCorrection.ColorCorrection[25] = iBPlusStep; m_A4Dlg.m_sFlatCorrection.ColorCorrection[26] = iBPlusStep; m_A4Dlg.m_sFlatCorrection.ColorCorrection[27] = iBPlusStep; m_A4Dlg.m_sFlatCorrection.ColorCorrection[28] = iBPlusStep; m_A4Dlg.m_sFlatCorrection.ColorCorrection[29] = iBPlusStep; m_A4Dlg.m_sFlatCorrection.GrayCorrection[24] = iBPlusStep; m_A4Dlg.m_sFlatCorrection.GrayCorrection[25] = iBPlusStep; m_A4Dlg.m_sFlatCorrection.GrayCorrection[26] = iBPlusStep; m_A4Dlg.m_sFlatCorrection.GrayCorrection[27] = iBPlusStep; m_A4Dlg.m_sFlatCorrection.GrayCorrection[28] = iBPlusStep; m_A4Dlg.m_sFlatCorrection.GrayCorrection[29] = iBPlusStep; if(iBPlusStep != iBMiddleStep) { iBMiddleStep = iBPlusStep; } else { CString csMessage; csMessage.Format("暗场B面参数需要调整,0值出现次数%d,最小值为%d",nCountb,iBPlusStep); MessageBox(csMessage); if(m_bParamError != true) { InitButton(); m_bPause = true; m_bParamError = true; Bcycle = 0; return; } } } else { bBBlackImage = false; } CString csBBlack; csBBlack.Format("%d---%d", nCountb,m_A4Dlg.m_sFlatCorrection.ColorCorrection[24]); GetDlgItem(IDC_STATIC_BOFFSET)->SetWindowText(csBBlack); } mPicImage.release(); mPicFrontImage.release(); mPicBackImage.release(); if(!bABlackImage && !bBBlackImage) { //MessageBox("暗场校正完成"); //WriteLog("暗场校正完成"); GetDlgItem(IDC_STATIC_STATUES)->SetWindowText(_T("暗场校正完成")); m_pBlack.SetCheck(1); if(0 == m_pWExposure.GetCheck()) { CorrectWhiteImage(); } else { ((CButton*)GetDlgItem(IDC_CheckParamSet))->EnableWindow(TRUE); ((CButton*)GetDlgItem(IDC_CheckParamRead))->EnableWindow(TRUE); ((CButton*)GetDlgItem(IDC_BTN_FLATM))->EnableWindow(TRUE); ((CButton*)GetDlgItem(IDC_BTN_BLACKFLAT))->EnableWindow(TRUE); ((CButton*)GetDlgItem(IDC_BTN_EXFLAT))->EnableWindow(TRUE); ((CButton*)GetDlgItem(IDC_BTN_GAINFLAT))->EnableWindow(TRUE); ((CButton*)GetDlgItem(IDC_BTN_FLAT))->EnableWindow(TRUE); ((CButton*)GetDlgItem(IDC_BTN_CONTINUE))->EnableWindow(TRUE); ((CButton*)GetDlgItem(IDC_BUTTON1))->EnableWindow(TRUE); ((CButton*)GetDlgItem(IDC_BTN_PARAMCFG))->EnableWindow(TRUE); ((CButton*)GetDlgItem(IDC_BTN_PAUSE))->EnableWindow(FALSE); m_bPause = true; } } else { GetDlgItem(IDC_STATIC_STATUES)->SetWindowText(_T("正在处理暗场校正...")); m_A4Dlg.WriteParamFile(); CyclePro(); } } void CHuaGoCorrectDlg::CorrectWhiteImage() { cv::Mat mPicWGImage; cv::Mat mPicWCImage; cv::Mat matGFImage; cv::Mat matGBImage; cv::Mat matCFImage; cv::Mat matCBImage; WEcycle++; CString csCycle; csCycle.Format("循环处理第%d次", WEcycle); GetDlgItem(IDC_STATIC_WE)->SetWindowText(csCycle); int retg = m_drv->aquire_image(mPicWGImage,1); int retc = m_drv->aquire_image(mPicWCImage,3); if (retg && retc) //if (retg) { XdPrint("Failed - could not acquire image"); return; } if (mPicWGImage.empty() && mPicWCImage.empty()) //if (mPicWGImage.empty()) { XdPrint("Failed - could not acquire image"); return; } matGFImage = mPicWGImage(cv::Rect(0,0,mPicWGImage.cols/2,mPicWGImage.rows)).clone(); matGBImage = mPicWGImage(cv::Rect(mPicWGImage.cols/2,0,mPicWGImage.cols/2,mPicWGImage.rows)).clone(); matCFImage = mPicWCImage(cv::Rect(0,0,mPicWCImage.cols/2,mPicWCImage.rows)).clone(); matCBImage = mPicWCImage(cv::Rect(mPicWCImage.cols/2,0,mPicWCImage.cols/2,mPicWCImage.rows)).clone(); int igstep = 10; if(bAGrayWhiteImage) { vector rgf; vector ggf; vector bgf; int sumf = 0; double meanf = 0.0; histogram_bit32(matGFImage.data,matGFImage.rows,matGFImage.cols,rgf,ggf,bgf); sumf = accumulate(rgf.begin(), rgf.end(), 0); meanf = sumf / rgf.size(); //均值 if(meanf < 145.00) { m_A4Dlg.m_sFlatCorrection.GrayCorrection[0] += igstep; m_A4Dlg.m_sFlatCorrection.GrayCorrection[1] += igstep; m_A4Dlg.m_sFlatCorrection.GrayCorrection[2] += igstep; } else if(meanf > 155.00) { m_A4Dlg.m_sFlatCorrection.GrayCorrection[0] -= igstep; m_A4Dlg.m_sFlatCorrection.GrayCorrection[1] -= igstep; m_A4Dlg.m_sFlatCorrection.GrayCorrection[2] -= igstep; } else { bAGrayWhiteImage = false; } CString csAGray,csAGraylog; csAGray.Format("%0.1f---%d", meanf,m_A4Dlg.m_sFlatCorrection.GrayCorrection[0]); csAGraylog.Format("灰度A面:%0.1f---%d", meanf,m_A4Dlg.m_sFlatCorrection.GrayCorrection[0]); GetDlgItem(IDC_STATIC_AExposure)->SetWindowText(csAGray); WriteLog(csAGraylog); } if(bBGrayWhiteImage) { vector rgb; vector ggb; vector bgb; int sumb = 0; double meanb = 0.0; //均值 histogram_bit32(matGBImage.data,matGBImage.rows,matGBImage.cols,rgb,ggb,bgb); sumb = accumulate(rgb.begin(), rgb.end(), 0); meanb = sumb / rgb.size(); //均值 if(meanb < 145.00) { m_A4Dlg.m_sFlatCorrection.GrayCorrection[15] += igstep; m_A4Dlg.m_sFlatCorrection.GrayCorrection[16] += igstep; m_A4Dlg.m_sFlatCorrection.GrayCorrection[17] += igstep; } else if(meanb > 155.00) { m_A4Dlg.m_sFlatCorrection.GrayCorrection[15] -= igstep; m_A4Dlg.m_sFlatCorrection.GrayCorrection[16] -= igstep; m_A4Dlg.m_sFlatCorrection.GrayCorrection[17] -= igstep; } else { bBGrayWhiteImage = false; } CString csBGray,csBGraylog; csBGray.Format("%0.1f---%d", meanb,m_A4Dlg.m_sFlatCorrection.GrayCorrection[15]); csBGraylog.Format("灰度B面:%0.1f---%d", meanb,m_A4Dlg.m_sFlatCorrection.GrayCorrection[15]); GetDlgItem(IDC_STATIC_BExposure)->SetWindowText(csBGray); WriteLog(csBGraylog); } if(bAColorWhiteImage) { vector rcf; vector gcf; vector bcf; int sumrf = 0; int sumgf = 0; int sumbf = 0; double meanrf = 0.0; double meangf = 0.0; double meanbf = 0.0; histogram_bit32(matCFImage.data,matCFImage.rows,matCFImage.cols,rcf,gcf,bcf); sumrf = accumulate(rcf.begin(), rcf.end(), 0); meanrf = sumrf / rcf.size(); //均值 sumgf = accumulate(gcf.begin(), gcf.end(), 0); meangf = sumgf / gcf.size(); //均值 sumbf = accumulate(bcf.begin(), bcf.end(), 0); meanbf = sumbf / bcf.size(); //均值 int iAERAddStep = 0; int iAEGAddStep = 0; int iAEBAddStep = 0; int iAERPlusStep = 0; int iAEGPlusStep = 0; int iAEBPlusStep = 0; if(bAcolr) { if(meanrf < 148.00) { iAERMinStep = iAERMiddleStep; iAERAddStep = iAERMinStep + (iAERMaxStep - iAERMinStep)/2; m_A4Dlg.m_sFlatCorrection.ColorCorrection[0] = iAERAddStep; if(iAERAddStep != iAERMiddleStep) { iAERMiddleStep = iAERAddStep; } else { CString csMessage; csMessage.Format("白场彩色A面R参数需要调整,均值为%d,最大值为%d",meanrf,iAERMaxStep); MessageBox(csMessage); if(m_bParamError != true) { InitButton(); m_bPause = true; m_bParamError = true; WEcycle = 0; return; } } } else if(meanrf > 152.00) { iAERMaxStep = iAERMiddleStep; iAERPlusStep = (iAERMaxStep - (iAERMaxStep - iAERMinStep)/2); m_A4Dlg.m_sFlatCorrection.ColorCorrection[0] = iAERPlusStep; if(iAERPlusStep != iAERMiddleStep) { iAERMiddleStep = iAERPlusStep; } else { CString csMessage; csMessage.Format("白场彩色A面R参数需要调整,均值为%d,最小值为%d",meanrf,iAERPlusStep); MessageBox(csMessage); //MessageBox("白场彩色A面R参数需要调整"); if(m_bParamError != true) { InitButton(); m_bPause = true; m_bParamError = true; WEcycle = 0; return; } } } else { bAcolr = false; } } if(bAcolg) { if(meangf < 148.00) { iAEGMinStep = iAEGMiddleStep; iAEGAddStep = iAEGMinStep + (iAEGMaxStep - iAEGMinStep)/2; m_A4Dlg.m_sFlatCorrection.ColorCorrection[1] = iAEGAddStep; if(iAEGAddStep != iAEGMiddleStep) { iAEGMiddleStep = iAEGAddStep; } else { CString csMessage; csMessage.Format("白场彩色A面G参数需要调整,均值为%d,最大值为%d",meangf,iAEGMaxStep); MessageBox(csMessage); //MessageBox("白场彩色A面G参数需要调整"); if(m_bParamError != true) { InitButton(); m_bPause = true; m_bParamError = true; WEcycle = 0; return; } } } else if(meangf > 152.00) { iAEGMaxStep = iAEGMiddleStep; iAEGPlusStep = (iAEGMaxStep - (iAEGMaxStep - iAEGMinStep)/2); m_A4Dlg.m_sFlatCorrection.ColorCorrection[1] = iAEGPlusStep; //m_tab.SetCurSel(1); if(iAEGPlusStep != iAEGMiddleStep) { iAEGMiddleStep = iAEGPlusStep; } else { CString csMessage; csMessage.Format("白场彩色A面G参数需要调整,均值为%d,最小值为%d",meangf,iAEGPlusStep); MessageBox(csMessage); //MessageBox("白场彩色A面G参数需要调整"); if(m_bParamError != true) { InitButton(); m_bPause = true; m_bParamError = true; WEcycle = 0; return; } } } else { bAcolg = false; } } if(bAcolb) { if(meanbf < 148.00) { iAEBMinStep = iAEBMiddleStep; iAEBAddStep = iAEBMinStep + (iAEBMaxStep - iAEBMinStep)/2; m_A4Dlg.m_sFlatCorrection.ColorCorrection[2] = iAEBAddStep; if(iAEBAddStep != iAEBMiddleStep) { iAEBMiddleStep = iAEBAddStep; } else { CString csMessage; csMessage.Format("白场彩色A面B参数需要调整,均值为%d,最大值为%d",meanbf,iAEBMaxStep); MessageBox(csMessage); //MessageBox("白场彩色A面B参数需要调整"); if(m_bParamError != true) { InitButton(); m_bPause = true; m_bParamError = true; WEcycle = 0; return; } } } else if(meanbf > 152.00) { iAEBMaxStep = iAEBMiddleStep; iAEBPlusStep = (iAEBMaxStep - (iAEBMaxStep - iAEBMinStep)/2); m_A4Dlg.m_sFlatCorrection.ColorCorrection[2] = iAEBPlusStep; if(iAEBPlusStep != iAEBMiddleStep) { iAEBMiddleStep = iAEBPlusStep; } else { CString csMessage; csMessage.Format("白场彩色A面B参数需要调整,均值为%d,最小值为%d",meanbf,iAEBPlusStep); MessageBox(csMessage); //MessageBox("白场彩色A面B参数需要调整"); if(m_bParamError != true) { InitButton(); m_bPause = true; m_bParamError = true; WEcycle = 0; return; } } } else { bAcolb = false; } } if(!bAcolr && !bAcolg && !bAcolb) { bAColorWhiteImage = false; } CString csColorR,csColorG,csColorB,csAColorlog; csColorR.Format("%0.1f---%d", meanrf,m_A4Dlg.m_sFlatCorrection.ColorCorrection[0]); GetDlgItem(IDC_STATIC_ARExposure)->SetWindowText(csColorR); csColorG.Format("%0.1f---%d", meangf,m_A4Dlg.m_sFlatCorrection.ColorCorrection[1]); GetDlgItem(IDC_STATIC_AGExposure)->SetWindowText(csColorG); csColorB.Format("%0.1f---%d", meanbf,m_A4Dlg.m_sFlatCorrection.ColorCorrection[2]); GetDlgItem(IDC_STATIC_ABExposure)->SetWindowText(csColorB); csAColorlog.Format("彩色A面:R分量:%0.1f---%d, G分量:%0.1f---%d, B分量:%0.1f---%d", meanrf,m_A4Dlg.m_sFlatCorrection.ColorCorrection[0],meangf,m_A4Dlg.m_sFlatCorrection.ColorCorrection[1],meanbf,m_A4Dlg.m_sFlatCorrection.ColorCorrection[2]); WriteLog(csAColorlog); } if(bBColorWhiteImage) { vector rcb; vector gcb; vector bcb; int sumrb = 0; int sumgb = 0; int sumbb = 0; double meanrb = 0.0; double meangb = 0.0; double meanbb = 0.0; histogram_bit32(matCBImage.data,matCBImage.rows,matCBImage.cols,rcb,gcb,bcb); sumrb = accumulate(rcb.begin(), rcb.end(), 0); meanrb = sumrb / rcb.size(); //均值 sumgb = accumulate(gcb.begin(), gcb.end(), 0); meangb = sumgb / gcb.size(); //均值 sumbb = accumulate(bcb.begin(), bcb.end(), 0); meanbb = sumbb / bcb.size(); //均值 int iBERAddStep = 0; int iBEGAddStep = 0; int iBEBAddStep = 0; int iBERPlusStep = 0; int iBEGPlusStep = 0; int iBEBPlusStep = 0; if(bBcolr) { if(meanrb < 148.00) { iBERMinStep = iBERMiddleStep; iBERAddStep = iBERMinStep + (iBERMaxStep - iBERMinStep)/2; m_A4Dlg.m_sFlatCorrection.ColorCorrection[15] = iBERAddStep; if(iBERAddStep != iBERMiddleStep) { iBERMiddleStep = iBERAddStep; } else { CString csMessage; csMessage.Format("白场彩色B面R参数需要调整,均值为%d,最大值为%d",meanrb,iBERMaxStep); MessageBox(csMessage); //MessageBox("白场彩色B面R参数需要调整"); if(m_bParamError != true) { InitButton(); m_bPause = true; m_bParamError = true; WEcycle = 0; return; } } } else if(meanrb > 152.00) { iBERMaxStep = iBERMiddleStep; iBERPlusStep = (iBERMaxStep - (iBERMaxStep - iBERMinStep)/2); m_A4Dlg.m_sFlatCorrection.ColorCorrection[15] = iBERPlusStep; if(iBERPlusStep != iBERMiddleStep) { iBERMiddleStep = iBERPlusStep; } else { CString csMessage; csMessage.Format("白场彩色A面B参数需要调整,均值为%d,最小值为%d",meanrb,iBERPlusStep); MessageBox(csMessage); //MessageBox("白场彩色B面R参数需要调整"); if(m_bParamError != true) { InitButton(); m_bPause = true; m_bParamError = true; WEcycle = 0; return; } } } else { bBcolr = false; } } if(bBcolg) { if(meangb < 148.00) { iBEGMinStep = iBEGMiddleStep; iBEGAddStep = iBEGMinStep + (iBEGMaxStep - iBEGMinStep)/2; m_A4Dlg.m_sFlatCorrection.ColorCorrection[16] = iBEGAddStep; if(iBEGAddStep != iBEGMiddleStep) { iBEGMiddleStep = iBEGAddStep; } else { CString csMessage; csMessage.Format("白场彩色B面G参数需要调整,均值为%d,最大值为%d",meangb,iBEGMaxStep); MessageBox(csMessage); //MessageBox("白场彩色B面G参数需要调整"); if(m_bParamError != true) { InitButton(); m_bPause = true; m_bParamError = true; WEcycle = 0; return; } } } else if(meangb > 152.00) { iBEGMaxStep = iBEGMiddleStep; iBEGPlusStep = (iBEGMaxStep - (iBEGMaxStep - iBEGMinStep)/2); m_A4Dlg.m_sFlatCorrection.ColorCorrection[16] = iBEGPlusStep; if(iBEGPlusStep != iBEGMiddleStep) { iBEGMiddleStep = iBEGPlusStep; } else { CString csMessage; csMessage.Format("白场彩色B面G参数需要调整,均值为%d,最小值为%d",meangb,iBEGPlusStep); MessageBox(csMessage); //MessageBox("白场彩色B面G参数需要调整"); if(m_bParamError != true) { InitButton(); m_bPause = true; m_bParamError = true; WEcycle = 0; return; } } } else { bBcolg = false; } } if(bBcolb) { if(meanbb < 148.00) { iBEBMinStep = iBEBMiddleStep; iBEBAddStep = iBEBMinStep + (iBEBMaxStep - iBEBMinStep)/2; m_A4Dlg.m_sFlatCorrection.ColorCorrection[17] = iBEBAddStep; if(iBEBAddStep != iBEBMiddleStep) { iBEBMiddleStep = iBEBAddStep; } else { CString csMessage; csMessage.Format("白场彩色B面G参数需要调整,均值为%d,最大值为%d",meanbb,iBEBMaxStep); MessageBox(csMessage); //MessageBox("白场彩色B面B参数需要调整"); if(m_bParamError != true) { InitButton(); m_bPause = true; m_bParamError = true; WEcycle = 0; return; } } } else if(meanbb > 152.00) { iBEBMaxStep = iBEBMiddleStep; iBEBPlusStep = (iBEBMaxStep - (iBEBMaxStep - iBEBMinStep)/2); m_A4Dlg.m_sFlatCorrection.ColorCorrection[17] = iBEBPlusStep; if(iBEBPlusStep != iBEBMiddleStep) { iBEBMiddleStep = iBEBPlusStep; } else { CString csMessage; csMessage.Format("白场彩色B面B参数需要调整,均值为%d,最小值为%d",meanbb,iBEBPlusStep); MessageBox(csMessage); //MessageBox("白场彩色B面B参数需要调整"); if(m_bParamError != true) { InitButton(); m_bPause = true; m_bParamError = true; WEcycle = 0; return; } } } else { bBcolb = false; } } if(!bBcolr && !bBcolg && !bBcolb) { bBColorWhiteImage = false; } CString csColorR,csColorG,csColorB,csBColorlog; csColorR.Format("%0.1f---%d", meanrb,m_A4Dlg.m_sFlatCorrection.ColorCorrection[15]); GetDlgItem(IDC_STATIC_BRExposure)->SetWindowText(csColorR); csColorG.Format("%0.1f---%d", meangb,m_A4Dlg.m_sFlatCorrection.ColorCorrection[16]); GetDlgItem(IDC_STATIC_BGExposure)->SetWindowText(csColorG); csColorB.Format("%0.1f---%d", meanbb,m_A4Dlg.m_sFlatCorrection.ColorCorrection[17]); GetDlgItem(IDC_STATIC_BBExposure)->SetWindowText(csColorB); csBColorlog.Format("彩色B面:R分量:%0.1f---%d, G分量:%0.1f---%d, B分量:%0.1f---%d", meanrb,m_A4Dlg.m_sFlatCorrection.ColorCorrection[15],meangb,m_A4Dlg.m_sFlatCorrection.ColorCorrection[16],meanbb,m_A4Dlg.m_sFlatCorrection.ColorCorrection[17]); WriteLog(csBColorlog); } mPicWGImage.release(); mPicWCImage.release(); matGFImage.release(); matGBImage.release(); matCFImage.release(); matCBImage.release(); if(!bAGrayWhiteImage && !bBGrayWhiteImage && !bAColorWhiteImage && !bBColorWhiteImage) { //MessageBox("白场校正完成"); GetDlgItem(IDC_STATIC_STATUES2)->SetWindowText(_T("白场曝光校正完成")); m_pWExposure.SetCheck(1); if(0 == m_pWGain.GetCheck()) { CorrectWhiteGain(); } else { ((CButton*)GetDlgItem(IDC_CheckParamSet))->EnableWindow(TRUE); ((CButton*)GetDlgItem(IDC_CheckParamRead))->EnableWindow(TRUE); ((CButton*)GetDlgItem(IDC_BTN_FLATM))->EnableWindow(TRUE); ((CButton*)GetDlgItem(IDC_BTN_BLACKFLAT))->EnableWindow(TRUE); ((CButton*)GetDlgItem(IDC_BTN_EXFLAT))->EnableWindow(TRUE); ((CButton*)GetDlgItem(IDC_BTN_GAINFLAT))->EnableWindow(TRUE); ((CButton*)GetDlgItem(IDC_BTN_FLAT))->EnableWindow(TRUE); ((CButton*)GetDlgItem(IDC_BTN_CONTINUE))->EnableWindow(TRUE); ((CButton*)GetDlgItem(IDC_BUTTON1))->EnableWindow(TRUE); ((CButton*)GetDlgItem(IDC_BTN_PARAMCFG))->EnableWindow(TRUE); ((CButton*)GetDlgItem(IDC_BTN_PAUSE))->EnableWindow(FALSE); m_bPause = true; } } else { GetDlgItem(IDC_STATIC_STATUES2)->SetWindowText(_T("正在处理白场曝光校正...")); m_A4Dlg.WriteParamFile(); CyclePro(); } } void CHuaGoCorrectDlg::CorrectWhiteGain() { cv::Mat mPicWGImage; cv::Mat mPicWCImage; cv::Mat matGFImage; cv::Mat matGBImage; cv::Mat matCFImage; cv::Mat matCBImage; WGcycle++; CString csCycle; csCycle.Format("循环处理第%d次", WGcycle); GetDlgItem(IDC_STATIC_WG)->SetWindowText(csCycle); int retg = m_drv->aquire_image(mPicWGImage,1); int retc = m_drv->aquire_image(mPicWCImage,3); if (retg && retc) { XdPrint("Failed - could not acquire image"); return; } if (mPicWGImage.empty() && mPicWCImage.empty()) { XdPrint("Failed - could not acquire image"); return; } matGFImage = mPicWGImage(cv::Rect(0,0,mPicWGImage.cols/2,mPicWGImage.rows)).clone(); matGBImage = mPicWGImage(cv::Rect(mPicWGImage.cols/2,0,mPicWGImage.cols/2,mPicWGImage.rows)).clone(); matCFImage = mPicWCImage(cv::Rect(0,0,mPicWCImage.cols/2,mPicWCImage.rows)).clone(); matCBImage = mPicWCImage(cv::Rect(mPicWCImage.cols/2,0,mPicWCImage.cols/2,mPicWCImage.rows)).clone(); int igstep = 5; if(bAGrayWhiteGain) { vector rgf; vector ggf; vector bgf; int sumf = 0; double meanf = 0.0; //int kk = m_matFImage.channels(); histogram_bit32(matGFImage.data,matGFImage.rows,matGFImage.cols,rgf,ggf,bgf); sumf = accumulate(rgf.begin(), rgf.end(), 0); meanf = sumf / rgf.size(); //均值 if(meanf < 200.00) { m_A4Dlg.m_sFlatCorrection.GrayCorrection[3] += igstep; m_A4Dlg.m_sFlatCorrection.GrayCorrection[4] += igstep; m_A4Dlg.m_sFlatCorrection.GrayCorrection[5] += igstep; m_A4Dlg.m_sFlatCorrection.GrayCorrection[6] += igstep; m_A4Dlg.m_sFlatCorrection.GrayCorrection[7] += igstep; m_A4Dlg.m_sFlatCorrection.GrayCorrection[8] += igstep; } else if(meanf > 225.00) { m_A4Dlg.m_sFlatCorrection.GrayCorrection[3] -= igstep; m_A4Dlg.m_sFlatCorrection.GrayCorrection[4] -= igstep; m_A4Dlg.m_sFlatCorrection.GrayCorrection[5] -= igstep; m_A4Dlg.m_sFlatCorrection.GrayCorrection[6] -= igstep; m_A4Dlg.m_sFlatCorrection.GrayCorrection[7] -= igstep; m_A4Dlg.m_sFlatCorrection.GrayCorrection[8] -= igstep; } else { bAGrayWhiteGain = false; } CString csAGray; csAGray.Format("%d", m_A4Dlg.m_sFlatCorrection.GrayCorrection[3]); GetDlgItem(IDC_STATIC_AGain)->SetWindowText(csAGray); } if(bBGrayWhiteGain) { vector rgb; vector ggb; vector bgb; int sumb = 0; double meanb = 0.0; //均值 histogram_bit32(matGBImage.data,matGBImage.rows,matGBImage.cols,rgb,ggb,bgb); sumb = accumulate(rgb.begin(), rgb.end(), 0); meanb = sumb / rgb.size(); //均值 if(meanb < 200.00) { m_A4Dlg.m_sFlatCorrection.GrayCorrection[18] += igstep; m_A4Dlg.m_sFlatCorrection.GrayCorrection[19] += igstep; m_A4Dlg.m_sFlatCorrection.GrayCorrection[20] += igstep; m_A4Dlg.m_sFlatCorrection.GrayCorrection[21] += igstep; m_A4Dlg.m_sFlatCorrection.GrayCorrection[22] += igstep; m_A4Dlg.m_sFlatCorrection.GrayCorrection[23] += igstep; } else if(meanb > 225.00) { m_A4Dlg.m_sFlatCorrection.GrayCorrection[18] -= igstep; m_A4Dlg.m_sFlatCorrection.GrayCorrection[19] -= igstep; m_A4Dlg.m_sFlatCorrection.GrayCorrection[20] -= igstep; m_A4Dlg.m_sFlatCorrection.GrayCorrection[21] -= igstep; m_A4Dlg.m_sFlatCorrection.GrayCorrection[22] -= igstep; m_A4Dlg.m_sFlatCorrection.GrayCorrection[23] -= igstep; } else { bBGrayWhiteGain = false; } CString csBGray; csBGray.Format("%d", m_A4Dlg.m_sFlatCorrection.GrayCorrection[18]); GetDlgItem(IDC_STATIC_BGain)->SetWindowText(csBGray); } int icstep = 5; if(bAColorWhiteGain) { vector rcf; vector gcf; vector bcf; int sumrf = 0; int sumgf = 0; int sumbf = 0; double meanrf = 0.0; double meangf = 0.0; double meanbf = 0.0; //int kk = m_matFImage.channels(); histogram_bit32(matCFImage.data,matCFImage.rows,matCFImage.cols,rcf,gcf,bcf); sumrf = accumulate(rcf.begin(), rcf.end(), 0); meanrf = sumrf / rcf.size(); //均值 sumgf = accumulate(gcf.begin(), gcf.end(), 0); meangf = sumgf / gcf.size(); //均值 sumbf = accumulate(bcf.begin(), bcf.end(), 0); meanbf = sumbf / bcf.size(); //均值 if((meanrf < 200.00) || (meangf < 200.00) || (meanbf < 200.00)) { m_A4Dlg.m_sFlatCorrection.ColorCorrection[3] += igstep; m_A4Dlg.m_sFlatCorrection.ColorCorrection[4] += igstep; m_A4Dlg.m_sFlatCorrection.ColorCorrection[5] += igstep; m_A4Dlg.m_sFlatCorrection.ColorCorrection[6] += igstep; m_A4Dlg.m_sFlatCorrection.ColorCorrection[7] += igstep; m_A4Dlg.m_sFlatCorrection.ColorCorrection[8] += igstep; } else if((meanrf > 225.00) || (meangf > 225.00) || (meanbf > 225.00)) { m_A4Dlg.m_sFlatCorrection.ColorCorrection[3] -= igstep; m_A4Dlg.m_sFlatCorrection.ColorCorrection[4] -= igstep; m_A4Dlg.m_sFlatCorrection.ColorCorrection[5] -= igstep; m_A4Dlg.m_sFlatCorrection.ColorCorrection[6] -= igstep; m_A4Dlg.m_sFlatCorrection.ColorCorrection[7] -= igstep; m_A4Dlg.m_sFlatCorrection.ColorCorrection[8] -= igstep; } else { bAColorWhiteGain = false; } CString csColor; csColor.Format("%d", m_A4Dlg.m_sFlatCorrection.ColorCorrection[3]); GetDlgItem(IDC_STATIC_ACGain)->SetWindowText(csColor); } if(bBColorWhiteGain) { vector rcb; vector gcb; vector bcb; int sumrb = 0; int sumgb = 0; int sumbb = 0; double meanrb = 0.0; double meangb = 0.0; double meanbb = 0.0; //int kk = m_matFImage.channels(); histogram_bit32(matCBImage.data,matCBImage.rows,matCBImage.cols,rcb,gcb,bcb); sumrb = accumulate(rcb.begin(), rcb.end(), 0); meanrb = sumrb / rcb.size(); //均值 sumgb = accumulate(gcb.begin(), gcb.end(), 0); meangb = sumgb / gcb.size(); //均值 sumbb = accumulate(bcb.begin(), bcb.end(), 0); meanbb = sumbb / bcb.size(); //均值 if((meanrb < 200.00) || (meangb < 200.00) || (meanbb < 200.00)) { m_A4Dlg.m_sFlatCorrection.ColorCorrection[18] += igstep; m_A4Dlg.m_sFlatCorrection.ColorCorrection[19] += igstep; m_A4Dlg.m_sFlatCorrection.ColorCorrection[20] += igstep; m_A4Dlg.m_sFlatCorrection.ColorCorrection[21] += igstep; m_A4Dlg.m_sFlatCorrection.ColorCorrection[22] += igstep; m_A4Dlg.m_sFlatCorrection.ColorCorrection[23] += igstep; } else if((meanrb > 225.00) || (meangb > 225.00) || (meanbb > 225.00)) { m_A4Dlg.m_sFlatCorrection.ColorCorrection[18] -= igstep; m_A4Dlg.m_sFlatCorrection.ColorCorrection[19] -= igstep; m_A4Dlg.m_sFlatCorrection.ColorCorrection[20] -= igstep; m_A4Dlg.m_sFlatCorrection.ColorCorrection[21] -= igstep; m_A4Dlg.m_sFlatCorrection.ColorCorrection[22] -= igstep; m_A4Dlg.m_sFlatCorrection.ColorCorrection[23] -= igstep; } else { bBColorWhiteGain = false; } CString csColor; csColor.Format("%d", m_A4Dlg.m_sFlatCorrection.ColorCorrection[18]); GetDlgItem(IDC_STATIC_BCGain)->SetWindowText(csColor); } mPicWGImage.release(); mPicWCImage.release(); matGFImage.release(); matGBImage.release(); matCFImage.release(); matCBImage.release(); if(!bAGrayWhiteGain && !bBGrayWhiteGain && !bAColorWhiteGain && !bBColorWhiteGain) { GetDlgItem(IDC_STATIC_STATUES3)->SetWindowText(_T("白场增益校正完成")); m_pWGain.SetCheck(1); CorrectFinish(); } else { GetDlgItem(IDC_STATIC_STATUES3)->SetWindowText(_T("正在处理白场增益校正...")); m_A4Dlg.WriteParamFile(); CyclePro(); } } void CHuaGoCorrectDlg::CorrectFinish() { for(int i = 0; i < 30; i++) { m_A4Dlg.m_sFlatCorrection.GrayFlat[i] = m_A4Dlg.m_sFlatCorrection.GrayCorrection[i]; } m_A4Dlg.m_sFlatCorrection.GrayFlat[3] += 24; m_A4Dlg.m_sFlatCorrection.GrayFlat[4] += 24; m_A4Dlg.m_sFlatCorrection.GrayFlat[5] += 24; m_A4Dlg.m_sFlatCorrection.GrayFlat[6] += 24; m_A4Dlg.m_sFlatCorrection.GrayFlat[7] += 24; m_A4Dlg.m_sFlatCorrection.GrayFlat[8] += 24; m_A4Dlg.m_sFlatCorrection.GrayFlat[18] += 24; m_A4Dlg.m_sFlatCorrection.GrayFlat[19] += 24; m_A4Dlg.m_sFlatCorrection.GrayFlat[20] += 24; m_A4Dlg.m_sFlatCorrection.GrayFlat[21] += 24; m_A4Dlg.m_sFlatCorrection.GrayFlat[22] += 24; m_A4Dlg.m_sFlatCorrection.GrayFlat[23] += 24; for(int j = 0; j < 30; j++) { m_A4Dlg.m_sFlatCorrection.ColorFlat[j] = m_A4Dlg.m_sFlatCorrection.ColorCorrection[j]; } m_A4Dlg.m_sFlatCorrection.ColorFlat[3] += 24; m_A4Dlg.m_sFlatCorrection.ColorFlat[4] += 24; m_A4Dlg.m_sFlatCorrection.ColorFlat[5] += 24; m_A4Dlg.m_sFlatCorrection.ColorFlat[6] += 24; m_A4Dlg.m_sFlatCorrection.ColorFlat[7] += 24; m_A4Dlg.m_sFlatCorrection.ColorFlat[8] += 24; m_A4Dlg.m_sFlatCorrection.ColorFlat[18] += 24; m_A4Dlg.m_sFlatCorrection.ColorFlat[19] += 24; m_A4Dlg.m_sFlatCorrection.ColorFlat[20] += 24; m_A4Dlg.m_sFlatCorrection.ColorFlat[21] += 24; m_A4Dlg.m_sFlatCorrection.ColorFlat[22] += 24; m_A4Dlg.m_sFlatCorrection.ColorFlat[23] += 24; m_A4Dlg.WriteParamFile(); CorrectEndUpdate(); MessageBox("校正完成"); ((CButton*)GetDlgItem(IDC_CheckParamSet))->EnableWindow(TRUE); ((CButton*)GetDlgItem(IDC_CheckParamRead))->EnableWindow(TRUE); ((CButton*)GetDlgItem(IDC_BTN_FLATM))->EnableWindow(TRUE); ((CButton*)GetDlgItem(IDC_BTN_BLACKFLAT))->EnableWindow(TRUE); ((CButton*)GetDlgItem(IDC_BTN_EXFLAT))->EnableWindow(TRUE); ((CButton*)GetDlgItem(IDC_BTN_GAINFLAT))->EnableWindow(TRUE); ((CButton*)GetDlgItem(IDC_BTN_FLAT))->EnableWindow(TRUE); ((CButton*)GetDlgItem(IDC_BTN_CONTINUE))->EnableWindow(TRUE); ((CButton*)GetDlgItem(IDC_BUTTON1))->EnableWindow(TRUE); ((CButton*)GetDlgItem(IDC_BTN_PARAMCFG))->EnableWindow(TRUE); ((CButton*)GetDlgItem(IDC_BTN_PAUSE))->EnableWindow(FALSE); m_bPause = true; } void CHuaGoCorrectDlg::ShowFrontImage(int index) { m_matFImage.release(); m_matBImage.release(); int retf = m_drv->aquire_image(m_matFImage,index); int retb = m_drv->aquire_image(m_matBImage,index+2); if (retf && retb) { XdPrint("Failed - could not acquire image"); return; } if (m_matFImage.empty() && m_matBImage.empty()) { XdPrint("Failed - could not acquire image"); return; } CRect rectf,rectb; cv::Size winfSize(rectf.right, rectf.bottom); cv::Size winbSize(rectb.right, rectb.bottom); // Resize the source to the size of the destination image if necessary cv::Mat cvImgFTmp(winfSize, CV_8UC3); cv::Mat cvImgBTmp(winbSize, CV_8UC3); if (m_matFImage.size() != winfSize) { cv::resize(m_matFImage, cvImgFTmp, winfSize); } else { cvImgFTmp = m_matFImage; } if (m_matBImage.size() != winbSize) { cv::resize(m_matBImage, cvImgBTmp, winbSize); } else { cvImgBTmp = m_matBImage; } CImage imgfDst,imgbDst; Mat2CImage(&cvImgFTmp, imgfDst); Mat2CImage(&cvImgBTmp, imgbDst); //imgfDst.Draw(GetDlgItem(IDC_STATIC_PIC1)->GetDC()->GetSafeHdc(), rectf); //Sleep(500); //imgbDst.Draw(GetDlgItem(IDC_STATIC_PIC2)->GetDC()->GetSafeHdc(), rectb); } void CHuaGoCorrectDlg::ShowBackImage(int index) { m_matFImage.release(); m_matBImage.release(); int retf = m_drv->aquire_image(m_matFImage,index); int retb = m_drv->aquire_image(m_matBImage,index+1); if (retf && retb) { XdPrint("Failed - could not acquire image"); return; } if (m_matFImage.empty() && m_matBImage.empty()) { XdPrint("Failed - could not acquire image"); return; }; CRect rectf,rectb; //GetDlgItem(IDC_STATIC_PIC1)->GetClientRect(&rectf); //GetDlgItem(IDC_STATIC_PIC2)->GetClientRect(&rectb); cv::Size winfSize(rectf.right, rectf.bottom); cv::Size winbSize(rectb.right, rectb.bottom); // Resize the source to the size of the destination image if necessary cv::Mat cvImgFTmp(winfSize, CV_8UC3); cv::Mat cvImgBTmp(winbSize, CV_8UC3); if (m_matFImage.size() != winfSize) { cv::resize(m_matFImage, cvImgFTmp, winfSize); } else { cvImgFTmp = m_matFImage; } if (m_matBImage.size() != winbSize) { cv::resize(m_matBImage, cvImgBTmp, winbSize); } else { cvImgBTmp = m_matBImage; } CImage imgfDst,imgbDst; Mat2CImage(&cvImgFTmp, imgfDst); Mat2CImage(&cvImgBTmp, imgbDst); //imgfDst.Draw(GetDlgItem(IDC_STATIC_PIC1)->GetDC()->GetSafeHdc(), rectf); //Sleep(500); //imgbDst.Draw(GetDlgItem(IDC_STATIC_PIC2)->GetDC()->GetSafeHdc(), rectb); } void CHuaGoCorrectDlg::CyclePro() { UINT gains_Color[30] = {0}; UINT gains_Gray[30] = {0}; byte gain_Color[512] = {0}; byte gain_Gray[512] = {0}; byte gain_data_Color[524] = {0}; byte gain_data_Gray[524] = {0}; //WriteLog("偏置赋值"); gains_Color[0] = m_A4Dlg.m_sFlatCorrection.ColorCorrection[2]; gains_Color[1] = m_A4Dlg.m_sFlatCorrection.ColorCorrection[1]; gains_Color[2] = m_A4Dlg.m_sFlatCorrection.ColorCorrection[0]; gains_Color[3] = m_A4Dlg.m_sFlatCorrection.ColorCorrection[17]; gains_Color[4] = m_A4Dlg.m_sFlatCorrection.ColorCorrection[16]; gains_Color[5] = m_A4Dlg.m_sFlatCorrection.ColorCorrection[15]; gains_Color[6] = m_A4Dlg.m_sFlatCorrection.ColorCorrection[5]; gains_Color[7] = m_A4Dlg.m_sFlatCorrection.ColorCorrection[4]; gains_Color[8] = m_A4Dlg.m_sFlatCorrection.ColorCorrection[3]; gains_Color[9] = m_A4Dlg.m_sFlatCorrection.ColorCorrection[8]; gains_Color[10] = m_A4Dlg.m_sFlatCorrection.ColorCorrection[7]; gains_Color[11] = m_A4Dlg.m_sFlatCorrection.ColorCorrection[6]; gains_Color[12] = m_A4Dlg.m_sFlatCorrection.ColorCorrection[20]; gains_Color[13] = m_A4Dlg.m_sFlatCorrection.ColorCorrection[19]; gains_Color[14] = m_A4Dlg.m_sFlatCorrection.ColorCorrection[18]; gains_Color[15] = m_A4Dlg.m_sFlatCorrection.ColorCorrection[23]; gains_Color[16] = m_A4Dlg.m_sFlatCorrection.ColorCorrection[22]; gains_Color[17] = m_A4Dlg.m_sFlatCorrection.ColorCorrection[21]; gains_Color[18] = m_A4Dlg.m_sFlatCorrection.ColorCorrection[11]; gains_Color[19] = m_A4Dlg.m_sFlatCorrection.ColorCorrection[10]; gains_Color[20] = m_A4Dlg.m_sFlatCorrection.ColorCorrection[9]; gains_Color[21] = m_A4Dlg.m_sFlatCorrection.ColorCorrection[14]; gains_Color[22] = m_A4Dlg.m_sFlatCorrection.ColorCorrection[13]; gains_Color[23] = m_A4Dlg.m_sFlatCorrection.ColorCorrection[12]; gains_Color[24] = m_A4Dlg.m_sFlatCorrection.ColorCorrection[26]; gains_Color[25] = m_A4Dlg.m_sFlatCorrection.ColorCorrection[25]; gains_Color[26] = m_A4Dlg.m_sFlatCorrection.ColorCorrection[24]; gains_Color[27] = m_A4Dlg.m_sFlatCorrection.ColorCorrection[29]; gains_Color[28] = m_A4Dlg.m_sFlatCorrection.ColorCorrection[28]; gains_Color[29] = m_A4Dlg.m_sFlatCorrection.ColorCorrection[27]; gains_Gray[0] = m_A4Dlg.m_sFlatCorrection.GrayCorrection[2]; gains_Gray[1] = m_A4Dlg.m_sFlatCorrection.GrayCorrection[1]; gains_Gray[2] = m_A4Dlg.m_sFlatCorrection.GrayCorrection[0]; gains_Gray[3] = m_A4Dlg.m_sFlatCorrection.GrayCorrection[17]; gains_Gray[4] = m_A4Dlg.m_sFlatCorrection.GrayCorrection[16]; gains_Gray[5] = m_A4Dlg.m_sFlatCorrection.GrayCorrection[15]; gains_Gray[6] = m_A4Dlg.m_sFlatCorrection.GrayCorrection[5]; gains_Gray[7] = m_A4Dlg.m_sFlatCorrection.GrayCorrection[4]; gains_Gray[8] = m_A4Dlg.m_sFlatCorrection.GrayCorrection[3]; gains_Gray[9] = m_A4Dlg.m_sFlatCorrection.GrayCorrection[8]; gains_Gray[10] = m_A4Dlg.m_sFlatCorrection.GrayCorrection[7]; gains_Gray[11] = m_A4Dlg.m_sFlatCorrection.GrayCorrection[6]; gains_Gray[12] = m_A4Dlg.m_sFlatCorrection.GrayCorrection[20]; gains_Gray[13] = m_A4Dlg.m_sFlatCorrection.GrayCorrection[19]; gains_Gray[14] = m_A4Dlg.m_sFlatCorrection.GrayCorrection[18]; gains_Gray[15] = m_A4Dlg.m_sFlatCorrection.GrayCorrection[23]; gains_Gray[16] = m_A4Dlg.m_sFlatCorrection.GrayCorrection[22]; gains_Gray[17] = m_A4Dlg.m_sFlatCorrection.GrayCorrection[21]; gains_Gray[18] = m_A4Dlg.m_sFlatCorrection.GrayCorrection[11]; gains_Gray[19] = m_A4Dlg.m_sFlatCorrection.GrayCorrection[10]; gains_Gray[20] = m_A4Dlg.m_sFlatCorrection.GrayCorrection[9]; gains_Gray[21] = m_A4Dlg.m_sFlatCorrection.GrayCorrection[14]; gains_Gray[22] = m_A4Dlg.m_sFlatCorrection.GrayCorrection[13]; gains_Gray[23] = m_A4Dlg.m_sFlatCorrection.GrayCorrection[12]; gains_Gray[24] = m_A4Dlg.m_sFlatCorrection.GrayCorrection[26]; gains_Gray[25] = m_A4Dlg.m_sFlatCorrection.GrayCorrection[25]; gains_Gray[26] = m_A4Dlg.m_sFlatCorrection.GrayCorrection[24]; gains_Gray[27] = m_A4Dlg.m_sFlatCorrection.GrayCorrection[29]; gains_Gray[28] = m_A4Dlg.m_sFlatCorrection.GrayCorrection[28]; gains_Gray[29] = m_A4Dlg.m_sFlatCorrection.GrayCorrection[27]; intToByte(gains_Color, gain_Color, 30); intToByte(gains_Gray, gain_Gray, 30); Sleep(1000); USBCBA4 ubc_Color; ubc_Color.u32_Command = SEND_COLORCORRECT_FLAT; ubc_Color.u32_Count = 120; memcpy(ubc_Color.buffer,gain_Color,512); ubc_Color.u32_Data = 0; int length_Color = sizeof(ubc_Color); memmove(gain_data_Color,&ubc_Color,length_Color); WriteLog("下发彩色平场校正指令"); m_drv->SendColorCorrentFlat(gain_data_Color,length_Color); Sleep(2000); USBCBA4 ubc_Gray; ubc_Gray.u32_Command = SEND_GRAYCORRECT_FLAT; ubc_Gray.u32_Count = 120; memcpy(ubc_Gray.buffer,gain_Gray,512); ubc_Gray.u32_Data = 0; int length_Gray = sizeof(ubc_Gray); memmove(gain_data_Gray,&ubc_Gray,length_Gray); WriteLog("下发灰度平场校正指令"); m_drv->SendGrayCorrectFlat(gain_data_Gray,length_Gray); Sleep(2000); //OnBnClickedBtnFlat(); //WriteLog("图片队列清空"); m_drv->reset(); //WriteLog("开始平场校正"); /* m_drv->FlatA4Conrrect(); Sleep(28000); //WriteLog("暗场校正"); if(1 == m_pBlack.GetCheck()) { if(1 == m_pWExposure.GetCheck()) { if(0 == m_pWGain.GetCheck()) { CorrectWhiteGain(); } } else { CorrectWhiteImage(); } } else { CorrectBlackImage(); } */ } void CHuaGoCorrectDlg::WriteLog(CString msg) { if (!msg.IsEmpty()) { FILE *pFile = fopen(".//log//CorrectLog.log", "a+"); if (pFile != NULL) { char cTime[32]; CTime currTime = CTime::GetCurrentTime(); _snprintf(cTime, 30, "[%04d-%02d-%02d %02d:%02d:%02d]", currTime.GetYear(), currTime.GetMonth(), currTime.GetDay(), currTime.GetHour(), currTime.GetMinute(), currTime.GetSecond()); fwrite(cTime, 1, strlen(cTime), pFile); fwrite(msg, 1, strlen(msg), pFile); fwrite("\n", 1, 1, pFile); fclose(pFile); } } } void CHuaGoCorrectDlg::CorrectCMDUpdate() { //GetDlgItem(IDC_STATIC_SHOW)->SetWindowText(_T("校正参数下发")); //WriteLog(csCycle); m_A4Dlg.SaveNewParam(m_A4Dlg.m_iSelIndex); UINT gains_Color[30] = {0}; UINT Color[30] = {0}; UINT gains_Gray[30] = {0}; UINT Gray[30] = {0}; byte gain_Color[512] = {0}; byte Colors[512] = {0}; byte gain_Gray[512] = {0}; byte Grays[512] = {0}; byte gain_data_Color[524] = {0}; byte data_Color[524] = {0}; byte gain_data_Gray[524] = {0}; byte data_Gray[524] = {0}; gains_Color[0] = m_A4Dlg.m_sFlatCorrection.ColorCorrection[0]; gains_Color[1] = m_A4Dlg.m_sFlatCorrection.ColorCorrection[1]; gains_Color[2] = m_A4Dlg.m_sFlatCorrection.ColorCorrection[2]; gains_Color[3] = m_A4Dlg.m_sFlatCorrection.ColorCorrection[15]; gains_Color[4] = m_A4Dlg.m_sFlatCorrection.ColorCorrection[16]; gains_Color[5] = m_A4Dlg.m_sFlatCorrection.ColorCorrection[17]; gains_Color[6] = m_A4Dlg.m_sFlatCorrection.ColorCorrection[3]; gains_Color[7] = m_A4Dlg.m_sFlatCorrection.ColorCorrection[4]; gains_Color[8] = m_A4Dlg.m_sFlatCorrection.ColorCorrection[5]; gains_Color[9] = m_A4Dlg.m_sFlatCorrection.ColorCorrection[6]; gains_Color[10] = m_A4Dlg.m_sFlatCorrection.ColorCorrection[7]; gains_Color[11] = m_A4Dlg.m_sFlatCorrection.ColorCorrection[8]; gains_Color[12] = m_A4Dlg.m_sFlatCorrection.ColorCorrection[18]; gains_Color[13] = m_A4Dlg.m_sFlatCorrection.ColorCorrection[19]; gains_Color[14] = m_A4Dlg.m_sFlatCorrection.ColorCorrection[20]; gains_Color[15] = m_A4Dlg.m_sFlatCorrection.ColorCorrection[21]; gains_Color[16] = m_A4Dlg.m_sFlatCorrection.ColorCorrection[22]; gains_Color[17] = m_A4Dlg.m_sFlatCorrection.ColorCorrection[23]; gains_Color[18] = m_A4Dlg.m_sFlatCorrection.ColorCorrection[9]; gains_Color[19] = m_A4Dlg.m_sFlatCorrection.ColorCorrection[10]; gains_Color[20] = m_A4Dlg.m_sFlatCorrection.ColorCorrection[11]; gains_Color[21] = m_A4Dlg.m_sFlatCorrection.ColorCorrection[12]; gains_Color[22] = m_A4Dlg.m_sFlatCorrection.ColorCorrection[13]; gains_Color[23] = m_A4Dlg.m_sFlatCorrection.ColorCorrection[14]; gains_Color[24] = m_A4Dlg.m_sFlatCorrection.ColorCorrection[24]; gains_Color[25] = m_A4Dlg.m_sFlatCorrection.ColorCorrection[25]; gains_Color[26] = m_A4Dlg.m_sFlatCorrection.ColorCorrection[26]; gains_Color[27] = m_A4Dlg.m_sFlatCorrection.ColorCorrection[27]; gains_Color[28] = m_A4Dlg.m_sFlatCorrection.ColorCorrection[28]; gains_Color[29] = m_A4Dlg.m_sFlatCorrection.ColorCorrection[29]; Color[0] = m_A4Dlg.m_sFlatCorrection.ColorFlat[0]; Color[1] = m_A4Dlg.m_sFlatCorrection.ColorFlat[1]; Color[2] = m_A4Dlg.m_sFlatCorrection.ColorFlat[2]; Color[3] = m_A4Dlg.m_sFlatCorrection.ColorFlat[15]; Color[4] = m_A4Dlg.m_sFlatCorrection.ColorFlat[16]; Color[5] = m_A4Dlg.m_sFlatCorrection.ColorFlat[17]; Color[6] = m_A4Dlg.m_sFlatCorrection.ColorFlat[3]; Color[7] = m_A4Dlg.m_sFlatCorrection.ColorFlat[4]; Color[8] = m_A4Dlg.m_sFlatCorrection.ColorFlat[5]; Color[9] = m_A4Dlg.m_sFlatCorrection.ColorFlat[6]; Color[10] = m_A4Dlg.m_sFlatCorrection.ColorFlat[7]; Color[11] = m_A4Dlg.m_sFlatCorrection.ColorFlat[8]; Color[12] = m_A4Dlg.m_sFlatCorrection.ColorFlat[18]; Color[13] = m_A4Dlg.m_sFlatCorrection.ColorFlat[19]; Color[14] = m_A4Dlg.m_sFlatCorrection.ColorFlat[20]; Color[15] = m_A4Dlg.m_sFlatCorrection.ColorFlat[21]; Color[16] = m_A4Dlg.m_sFlatCorrection.ColorFlat[22]; Color[17] = m_A4Dlg.m_sFlatCorrection.ColorFlat[23]; Color[18] = m_A4Dlg.m_sFlatCorrection.ColorFlat[9]; Color[19] = m_A4Dlg.m_sFlatCorrection.ColorFlat[10]; Color[20] = m_A4Dlg.m_sFlatCorrection.ColorFlat[11]; Color[21] = m_A4Dlg.m_sFlatCorrection.ColorFlat[12]; Color[22] = m_A4Dlg.m_sFlatCorrection.ColorFlat[13]; Color[23] = m_A4Dlg.m_sFlatCorrection.ColorFlat[14]; Color[24] = m_A4Dlg.m_sFlatCorrection.ColorFlat[24]; Color[25] = m_A4Dlg.m_sFlatCorrection.ColorFlat[25]; Color[26] = m_A4Dlg.m_sFlatCorrection.ColorFlat[26]; Color[27] = m_A4Dlg.m_sFlatCorrection.ColorFlat[27]; Color[28] = m_A4Dlg.m_sFlatCorrection.ColorFlat[28]; Color[29] = m_A4Dlg.m_sFlatCorrection.ColorFlat[29]; gains_Gray[0] = m_A4Dlg.m_sFlatCorrection.GrayCorrection[0]; gains_Gray[1] = m_A4Dlg.m_sFlatCorrection.GrayCorrection[1]; gains_Gray[2] = m_A4Dlg.m_sFlatCorrection.GrayCorrection[2]; gains_Gray[3] = m_A4Dlg.m_sFlatCorrection.GrayCorrection[15]; gains_Gray[4] = m_A4Dlg.m_sFlatCorrection.GrayCorrection[16]; gains_Gray[5] = m_A4Dlg.m_sFlatCorrection.GrayCorrection[17]; gains_Gray[6] = m_A4Dlg.m_sFlatCorrection.GrayCorrection[3]; gains_Gray[7] = m_A4Dlg.m_sFlatCorrection.GrayCorrection[4]; gains_Gray[8] = m_A4Dlg.m_sFlatCorrection.GrayCorrection[5]; gains_Gray[9] = m_A4Dlg.m_sFlatCorrection.GrayCorrection[6]; gains_Gray[10] = m_A4Dlg.m_sFlatCorrection.GrayCorrection[7]; gains_Gray[11] = m_A4Dlg.m_sFlatCorrection.GrayCorrection[8]; gains_Gray[12] = m_A4Dlg.m_sFlatCorrection.GrayCorrection[18]; gains_Gray[13] = m_A4Dlg.m_sFlatCorrection.GrayCorrection[19]; gains_Gray[14] = m_A4Dlg.m_sFlatCorrection.GrayCorrection[20]; gains_Gray[15] = m_A4Dlg.m_sFlatCorrection.GrayCorrection[21]; gains_Gray[16] = m_A4Dlg.m_sFlatCorrection.GrayCorrection[22]; gains_Gray[17] = m_A4Dlg.m_sFlatCorrection.GrayCorrection[23]; gains_Gray[18] = m_A4Dlg.m_sFlatCorrection.GrayCorrection[9]; gains_Gray[19] = m_A4Dlg.m_sFlatCorrection.GrayCorrection[10]; gains_Gray[20] = m_A4Dlg.m_sFlatCorrection.GrayCorrection[11]; gains_Gray[21] = m_A4Dlg.m_sFlatCorrection.GrayCorrection[12]; gains_Gray[22] = m_A4Dlg.m_sFlatCorrection.GrayCorrection[13]; gains_Gray[23] = m_A4Dlg.m_sFlatCorrection.GrayCorrection[14]; gains_Gray[24] = m_A4Dlg.m_sFlatCorrection.GrayCorrection[24]; gains_Gray[25] = m_A4Dlg.m_sFlatCorrection.GrayCorrection[25]; gains_Gray[26] = m_A4Dlg.m_sFlatCorrection.GrayCorrection[26]; gains_Gray[27] = m_A4Dlg.m_sFlatCorrection.GrayCorrection[27]; gains_Gray[28] = m_A4Dlg.m_sFlatCorrection.GrayCorrection[28]; gains_Gray[29] = m_A4Dlg.m_sFlatCorrection.GrayCorrection[29]; Gray[0] = m_A4Dlg.m_sFlatCorrection.GrayFlat[0]; Gray[1] = m_A4Dlg.m_sFlatCorrection.GrayFlat[1]; Gray[2] = m_A4Dlg.m_sFlatCorrection.GrayFlat[2]; Gray[3] = m_A4Dlg.m_sFlatCorrection.GrayFlat[15]; Gray[4] = m_A4Dlg.m_sFlatCorrection.GrayFlat[16]; Gray[5] = m_A4Dlg.m_sFlatCorrection.GrayFlat[17]; Gray[6] = m_A4Dlg.m_sFlatCorrection.GrayFlat[3]; Gray[7] = m_A4Dlg.m_sFlatCorrection.GrayFlat[4]; Gray[8] = m_A4Dlg.m_sFlatCorrection.GrayFlat[5]; Gray[9] = m_A4Dlg.m_sFlatCorrection.GrayFlat[6]; Gray[10] = m_A4Dlg.m_sFlatCorrection.GrayFlat[7]; Gray[11] = m_A4Dlg.m_sFlatCorrection.GrayFlat[8]; Gray[12] = m_A4Dlg.m_sFlatCorrection.GrayFlat[18]; Gray[13] = m_A4Dlg.m_sFlatCorrection.GrayFlat[19]; Gray[14] = m_A4Dlg.m_sFlatCorrection.GrayFlat[20]; Gray[15] = m_A4Dlg.m_sFlatCorrection.GrayFlat[21]; Gray[16] = m_A4Dlg.m_sFlatCorrection.GrayFlat[22]; Gray[17] = m_A4Dlg.m_sFlatCorrection.GrayFlat[23]; Gray[18] = m_A4Dlg.m_sFlatCorrection.GrayFlat[9]; Gray[19] = m_A4Dlg.m_sFlatCorrection.GrayFlat[10]; Gray[20] = m_A4Dlg.m_sFlatCorrection.GrayFlat[11]; Gray[21] = m_A4Dlg.m_sFlatCorrection.GrayFlat[12]; Gray[22] = m_A4Dlg.m_sFlatCorrection.GrayFlat[13]; Gray[23] = m_A4Dlg.m_sFlatCorrection.GrayFlat[14]; Gray[24] = m_A4Dlg.m_sFlatCorrection.GrayFlat[24]; Gray[25] = m_A4Dlg.m_sFlatCorrection.GrayFlat[25]; Gray[26] = m_A4Dlg.m_sFlatCorrection.GrayFlat[26]; Gray[27] = m_A4Dlg.m_sFlatCorrection.GrayFlat[27]; Gray[28] = m_A4Dlg.m_sFlatCorrection.GrayFlat[28]; Gray[29] = m_A4Dlg.m_sFlatCorrection.GrayFlat[29]; intToByte(gains_Color, gain_Color, 30); intToByte(Color, Colors, 30); intToByte(gains_Gray, gain_Gray, 30); intToByte(Gray, Grays, 30); Sleep(1000); USBCBA4 ubc_Color; ubc_Color.u32_Command = SEND_COLORCORRECT_FLAT; ubc_Color.u32_Count = 120; memcpy(ubc_Color.buffer,gain_Color,512); ubc_Color.u32_Data = 0; int length_Color = sizeof(ubc_Color); memmove(gain_data_Color,&ubc_Color,length_Color); m_drv->SendColorCorrentFlat(gain_data_Color,length_Color); Sleep(1000); USBCBA4 ubc_Colors; ubc_Colors.u32_Command = SEND_COLOR_FLAT; ubc_Colors.u32_Count = 120; memcpy(ubc_Colors.buffer,Colors,512); ubc_Colors.u32_Data = 0; int length_Colors = sizeof(ubc_Colors); memmove(data_Color,&ubc_Colors,length_Colors); m_drv->SendColorFlat(data_Color,length_Colors); Sleep(1000); USBCBA4 ubc_Gray; ubc_Gray.u32_Command = SEND_GRAYCORRECT_FLAT; ubc_Gray.u32_Count = 120; memcpy(ubc_Gray.buffer,gain_Gray,512); ubc_Gray.u32_Data = 0; int length_Gray = sizeof(ubc_Gray); memmove(gain_data_Gray,&ubc_Gray,length_Gray); m_drv->SendGrayCorrectFlat(gain_data_Gray,length_Gray); Sleep(1000); USBCBA4 ubc_Grays; ubc_Grays.u32_Command = SEND_GRAY_FLAT; ubc_Grays.u32_Count = 120; memcpy(ubc_Grays.buffer,Grays,512); ubc_Grays.u32_Data = 0; int length_Grays = sizeof(ubc_Grays); memmove(data_Gray,&ubc_Grays,length_Grays); m_drv->SendGrayFlat(data_Gray,length_Grays); //m_A4Dlg.WriteParamFile(); MessageBox(_T("校正参数设置成功")); } void CHuaGoCorrectDlg::CorrectEndUpdate() { UINT gains_Color[30] = {0}; UINT Color[30] = {0}; UINT gains_Gray[30] = {0}; UINT Gray[30] = {0}; byte gain_Color[512] = {0}; byte Colors[512] = {0}; byte gain_Gray[512] = {0}; byte Grays[512] = {0}; byte gain_data_Color[524] = {0}; byte data_Color[524] = {0}; byte gain_data_Gray[524] = {0}; byte data_Gray[524] = {0}; gains_Color[0] = m_A4Dlg.m_sFlatCorrection.ColorCorrection[2]; gains_Color[1] = m_A4Dlg.m_sFlatCorrection.ColorCorrection[1]; gains_Color[2] = m_A4Dlg.m_sFlatCorrection.ColorCorrection[0]; gains_Color[3] = m_A4Dlg.m_sFlatCorrection.ColorCorrection[17]; gains_Color[4] = m_A4Dlg.m_sFlatCorrection.ColorCorrection[16]; gains_Color[5] = m_A4Dlg.m_sFlatCorrection.ColorCorrection[15]; gains_Color[6] = m_A4Dlg.m_sFlatCorrection.ColorCorrection[5]; gains_Color[7] = m_A4Dlg.m_sFlatCorrection.ColorCorrection[4]; gains_Color[8] = m_A4Dlg.m_sFlatCorrection.ColorCorrection[3]; gains_Color[9] = m_A4Dlg.m_sFlatCorrection.ColorCorrection[8]; gains_Color[10] = m_A4Dlg.m_sFlatCorrection.ColorCorrection[7]; gains_Color[11] = m_A4Dlg.m_sFlatCorrection.ColorCorrection[6]; gains_Color[12] = m_A4Dlg.m_sFlatCorrection.ColorCorrection[20]; gains_Color[13] = m_A4Dlg.m_sFlatCorrection.ColorCorrection[19]; gains_Color[14] = m_A4Dlg.m_sFlatCorrection.ColorCorrection[18]; gains_Color[15] = m_A4Dlg.m_sFlatCorrection.ColorCorrection[23]; gains_Color[16] = m_A4Dlg.m_sFlatCorrection.ColorCorrection[22]; gains_Color[17] = m_A4Dlg.m_sFlatCorrection.ColorCorrection[21]; gains_Color[18] = m_A4Dlg.m_sFlatCorrection.ColorCorrection[11]; gains_Color[19] = m_A4Dlg.m_sFlatCorrection.ColorCorrection[10]; gains_Color[20] = m_A4Dlg.m_sFlatCorrection.ColorCorrection[9]; gains_Color[21] = m_A4Dlg.m_sFlatCorrection.ColorCorrection[14]; gains_Color[22] = m_A4Dlg.m_sFlatCorrection.ColorCorrection[13]; gains_Color[23] = m_A4Dlg.m_sFlatCorrection.ColorCorrection[12]; gains_Color[24] = m_A4Dlg.m_sFlatCorrection.ColorCorrection[26]; gains_Color[25] = m_A4Dlg.m_sFlatCorrection.ColorCorrection[25]; gains_Color[26] = m_A4Dlg.m_sFlatCorrection.ColorCorrection[24]; gains_Color[27] = m_A4Dlg.m_sFlatCorrection.ColorCorrection[29]; gains_Color[28] = m_A4Dlg.m_sFlatCorrection.ColorCorrection[28]; gains_Color[29] = m_A4Dlg.m_sFlatCorrection.ColorCorrection[27]; Color[0] = m_A4Dlg.m_sFlatCorrection.ColorFlat[2]; Color[1] = m_A4Dlg.m_sFlatCorrection.ColorFlat[1]; Color[2] = m_A4Dlg.m_sFlatCorrection.ColorFlat[0]; Color[3] = m_A4Dlg.m_sFlatCorrection.ColorFlat[17]; Color[4] = m_A4Dlg.m_sFlatCorrection.ColorFlat[16]; Color[5] = m_A4Dlg.m_sFlatCorrection.ColorFlat[15]; Color[6] = m_A4Dlg.m_sFlatCorrection.ColorFlat[5]; Color[7] = m_A4Dlg.m_sFlatCorrection.ColorFlat[4]; Color[8] = m_A4Dlg.m_sFlatCorrection.ColorFlat[3]; Color[9] = m_A4Dlg.m_sFlatCorrection.ColorFlat[8]; Color[10] = m_A4Dlg.m_sFlatCorrection.ColorFlat[7]; Color[11] = m_A4Dlg.m_sFlatCorrection.ColorFlat[6]; Color[12] = m_A4Dlg.m_sFlatCorrection.ColorFlat[20]; Color[13] = m_A4Dlg.m_sFlatCorrection.ColorFlat[19]; Color[14] = m_A4Dlg.m_sFlatCorrection.ColorFlat[18]; Color[15] = m_A4Dlg.m_sFlatCorrection.ColorFlat[23]; Color[16] = m_A4Dlg.m_sFlatCorrection.ColorFlat[22]; Color[17] = m_A4Dlg.m_sFlatCorrection.ColorFlat[21]; Color[18] = m_A4Dlg.m_sFlatCorrection.ColorFlat[11]; Color[19] = m_A4Dlg.m_sFlatCorrection.ColorFlat[10]; Color[20] = m_A4Dlg.m_sFlatCorrection.ColorFlat[9]; Color[21] = m_A4Dlg.m_sFlatCorrection.ColorFlat[14]; Color[22] = m_A4Dlg.m_sFlatCorrection.ColorFlat[13]; Color[23] = m_A4Dlg.m_sFlatCorrection.ColorFlat[12]; Color[24] = m_A4Dlg.m_sFlatCorrection.ColorFlat[26]; Color[25] = m_A4Dlg.m_sFlatCorrection.ColorFlat[25]; Color[26] = m_A4Dlg.m_sFlatCorrection.ColorFlat[24]; Color[27] = m_A4Dlg.m_sFlatCorrection.ColorFlat[29]; Color[28] = m_A4Dlg.m_sFlatCorrection.ColorFlat[28]; Color[29] = m_A4Dlg.m_sFlatCorrection.ColorFlat[27]; gains_Gray[0] = m_A4Dlg.m_sFlatCorrection.GrayCorrection[2]; gains_Gray[1] = m_A4Dlg.m_sFlatCorrection.GrayCorrection[1]; gains_Gray[2] = m_A4Dlg.m_sFlatCorrection.GrayCorrection[0]; gains_Gray[3] = m_A4Dlg.m_sFlatCorrection.GrayCorrection[17]; gains_Gray[4] = m_A4Dlg.m_sFlatCorrection.GrayCorrection[16]; gains_Gray[5] = m_A4Dlg.m_sFlatCorrection.GrayCorrection[15]; gains_Gray[6] = m_A4Dlg.m_sFlatCorrection.GrayCorrection[5]; gains_Gray[7] = m_A4Dlg.m_sFlatCorrection.GrayCorrection[4]; gains_Gray[8] = m_A4Dlg.m_sFlatCorrection.GrayCorrection[3]; gains_Gray[9] = m_A4Dlg.m_sFlatCorrection.GrayCorrection[8]; gains_Gray[10] = m_A4Dlg.m_sFlatCorrection.GrayCorrection[7]; gains_Gray[11] = m_A4Dlg.m_sFlatCorrection.GrayCorrection[6]; gains_Gray[12] = m_A4Dlg.m_sFlatCorrection.GrayCorrection[20]; gains_Gray[13] = m_A4Dlg.m_sFlatCorrection.GrayCorrection[19]; gains_Gray[14] = m_A4Dlg.m_sFlatCorrection.GrayCorrection[18]; gains_Gray[15] = m_A4Dlg.m_sFlatCorrection.GrayCorrection[23]; gains_Gray[16] = m_A4Dlg.m_sFlatCorrection.GrayCorrection[22]; gains_Gray[17] = m_A4Dlg.m_sFlatCorrection.GrayCorrection[21]; gains_Gray[18] = m_A4Dlg.m_sFlatCorrection.GrayCorrection[11]; gains_Gray[19] = m_A4Dlg.m_sFlatCorrection.GrayCorrection[10]; gains_Gray[20] = m_A4Dlg.m_sFlatCorrection.GrayCorrection[9]; gains_Gray[21] = m_A4Dlg.m_sFlatCorrection.GrayCorrection[14]; gains_Gray[22] = m_A4Dlg.m_sFlatCorrection.GrayCorrection[13]; gains_Gray[23] = m_A4Dlg.m_sFlatCorrection.GrayCorrection[12]; gains_Gray[24] = m_A4Dlg.m_sFlatCorrection.GrayCorrection[26]; gains_Gray[25] = m_A4Dlg.m_sFlatCorrection.GrayCorrection[25]; gains_Gray[26] = m_A4Dlg.m_sFlatCorrection.GrayCorrection[24]; gains_Gray[27] = m_A4Dlg.m_sFlatCorrection.GrayCorrection[29]; gains_Gray[28] = m_A4Dlg.m_sFlatCorrection.GrayCorrection[28]; gains_Gray[29] = m_A4Dlg.m_sFlatCorrection.GrayCorrection[27]; Gray[0] = m_A4Dlg.m_sFlatCorrection.GrayFlat[2]; Gray[1] = m_A4Dlg.m_sFlatCorrection.GrayFlat[1]; Gray[2] = m_A4Dlg.m_sFlatCorrection.GrayFlat[0]; Gray[3] = m_A4Dlg.m_sFlatCorrection.GrayFlat[17]; Gray[4] = m_A4Dlg.m_sFlatCorrection.GrayFlat[16]; Gray[5] = m_A4Dlg.m_sFlatCorrection.GrayFlat[15]; Gray[6] = m_A4Dlg.m_sFlatCorrection.GrayFlat[5]; Gray[7] = m_A4Dlg.m_sFlatCorrection.GrayFlat[4]; Gray[8] = m_A4Dlg.m_sFlatCorrection.GrayFlat[3]; Gray[9] = m_A4Dlg.m_sFlatCorrection.GrayFlat[8]; Gray[10] = m_A4Dlg.m_sFlatCorrection.GrayFlat[7]; Gray[11] = m_A4Dlg.m_sFlatCorrection.GrayFlat[6]; Gray[12] = m_A4Dlg.m_sFlatCorrection.GrayFlat[20]; Gray[13] = m_A4Dlg.m_sFlatCorrection.GrayFlat[19]; Gray[14] = m_A4Dlg.m_sFlatCorrection.GrayFlat[18]; Gray[15] = m_A4Dlg.m_sFlatCorrection.GrayFlat[23]; Gray[16] = m_A4Dlg.m_sFlatCorrection.GrayFlat[22]; Gray[17] = m_A4Dlg.m_sFlatCorrection.GrayFlat[21]; Gray[18] = m_A4Dlg.m_sFlatCorrection.GrayFlat[11]; Gray[19] = m_A4Dlg.m_sFlatCorrection.GrayFlat[10]; Gray[20] = m_A4Dlg.m_sFlatCorrection.GrayFlat[9]; Gray[21] = m_A4Dlg.m_sFlatCorrection.GrayFlat[14]; Gray[22] = m_A4Dlg.m_sFlatCorrection.GrayFlat[13]; Gray[23] = m_A4Dlg.m_sFlatCorrection.GrayFlat[12]; Gray[24] = m_A4Dlg.m_sFlatCorrection.GrayFlat[26]; Gray[25] = m_A4Dlg.m_sFlatCorrection.GrayFlat[25]; Gray[26] = m_A4Dlg.m_sFlatCorrection.GrayFlat[24]; Gray[27] = m_A4Dlg.m_sFlatCorrection.GrayFlat[29]; Gray[28] = m_A4Dlg.m_sFlatCorrection.GrayFlat[28]; Gray[29] = m_A4Dlg.m_sFlatCorrection.GrayFlat[27]; intToByte(gains_Color, gain_Color, 30); intToByte(Color, Colors, 30); intToByte(gains_Gray, gain_Gray, 30); intToByte(Gray, Grays, 30); Sleep(1000); USBCBA4 ubc_Color; ubc_Color.u32_Command = SEND_COLORCORRECT_FLAT; ubc_Color.u32_Count = 120; memcpy(ubc_Color.buffer,gain_Color,512); ubc_Color.u32_Data = 0; int length_Color = sizeof(ubc_Color); memmove(gain_data_Color,&ubc_Color,length_Color); m_drv->SendColorCorrentFlat(gain_data_Color,length_Color); Sleep(1000); USBCBA4 ubc_Colors; ubc_Colors.u32_Command = SEND_COLOR_FLAT; ubc_Colors.u32_Count = 120; memcpy(ubc_Colors.buffer,Colors,512); ubc_Colors.u32_Data = 0; int length_Colors = sizeof(ubc_Colors); memmove(data_Color,&ubc_Colors,length_Colors); m_drv->SendColorFlat(data_Color,length_Colors); Sleep(1000); USBCBA4 ubc_Gray; ubc_Gray.u32_Command = SEND_GRAYCORRECT_FLAT; ubc_Gray.u32_Count = 120; memcpy(ubc_Gray.buffer,gain_Gray,512); ubc_Gray.u32_Data = 0; int length_Gray = sizeof(ubc_Gray); memmove(gain_data_Gray,&ubc_Gray,length_Gray); m_drv->SendGrayCorrectFlat(gain_data_Gray,length_Gray); Sleep(1000); USBCBA4 ubc_Grays; ubc_Grays.u32_Command = SEND_GRAY_FLAT; ubc_Grays.u32_Count = 120; memcpy(ubc_Grays.buffer,Grays,512); ubc_Grays.u32_Data = 0; int length_Grays = sizeof(ubc_Grays); memmove(data_Gray,&ubc_Grays,length_Grays); m_drv->SendGrayFlat(data_Gray,length_Grays); //m_A4Dlg.WriteParamFile(); switch (m_A4Dlg.m_iSelIndex) { case 0: m_A4Dlg.default0param(); break; case 1: m_A4Dlg.default1param(); break; case 2: m_A4Dlg.default2param(); break; case 3: m_A4Dlg.default3param(); break; default: break; } GetDlgItem(IDC_STATIC_SHOW)->SetWindowText(_T("校正参数设置成功")); } void CHuaGoCorrectDlg::OnBnClickedBtnFlatm() { // TODO: 在此添加控件通知处理程序代码 if (!m_drv->IsConnected()) { MessageBox("扫描仪未连接!"); return; } m_drv->reset(); m_drv->DevStateChange(); GetDlgItem(IDC_STATIC_NUM)->SetWindowText("0"); GetDlgItem(IDC_STATIC_SHOW)->SetWindowText(_T("")); if (m_tab.GetCurSel() == 1) { m_drv->FlatA4(); /* if (b_review||b_suspend) KillTimer(N_TIMER_SEC); b_review = FALSE; b_suspend = FALSE; n_hour = 0; n_minute = 0; n_second = 0; SetTimer(N_TIMER_SEC, N_TIME_SEC, NULL); SetTimer(N_TIMER_SHOW, N_TIME_SHOW, NULL);*/ //Sleep(28000); //MessageBox("校正完成"); //OnBnClickedStopScan(); } else { } } void CHuaGoCorrectDlg::FSongleCorrect() { m_drv->reset(); m_drv->DevStateChange(); GetDlgItem(IDC_STATIC_SHOW)->SetWindowText(_T("")); m_drv->FlatA4(); SetTimer(N_TIMER_SEC, N_TIME_SEC, NULL); SetTimer(N_TIMER_SHOW, N_TIME_SHOW, NULL); } void CHuaGoCorrectDlg::OnCancel() { // TODO: 在此添加专用代码和/或调用基类 m_CISDlg.set_config(); m_dis.updatadistorionparam(); if (IDOK != AfxMessageBox("确定要退出服务器吗?", MB_ICONQUESTION|MB_OKCANCEL)) { return; } m_bExit = TRUE; CDialogEx::OnCancel(); } void CHuaGoCorrectDlg::OnBnClickedBtnBlackflat() { // TODO: 在此添加控件通知处理程序代码 ((CButton*)GetDlgItem(IDC_CheckParamSet))->EnableWindow(FALSE); ((CButton*)GetDlgItem(IDC_CheckParamRead))->EnableWindow(FALSE); ((CButton*)GetDlgItem(IDC_BTN_FLATM))->EnableWindow(FALSE); ((CButton*)GetDlgItem(IDC_BTN_BLACKFLAT))->EnableWindow(FALSE); ((CButton*)GetDlgItem(IDC_BTN_EXFLAT))->EnableWindow(FALSE); ((CButton*)GetDlgItem(IDC_BTN_GAINFLAT))->EnableWindow(FALSE); ((CButton*)GetDlgItem(IDC_BTN_FLAT))->EnableWindow(FALSE); ((CButton*)GetDlgItem(IDC_BTN_CONTINUE))->EnableWindow(FALSE); ((CButton*)GetDlgItem(IDC_BUTTON1))->EnableWindow(FALSE); ((CButton*)GetDlgItem(IDC_BTN_PARAMCFG))->EnableWindow(FALSE); ((CButton*)GetDlgItem(IDC_BTN_PAUSE))->EnableWindow(TRUE); iAMaxStep = iAMaxStep * 2; if(iAMaxStep > 255) { iAMaxStep = 255; } iAMiddleStep = iAMaxStep; iAMinStep = 0; iBMaxStep = iBMaxStep * 2; if(iBMaxStep > 255) { iBMaxStep = 255; } iBMiddleStep = iBMaxStep; iBMinStep = 0; m_pWExposure.SetCheck(1); m_pWGain.SetCheck(1); m_bPause = false; } void CHuaGoCorrectDlg::OnBnClickedBtnExflat() { // TODO: 在此添加控件通知处理程序代码 ((CButton*)GetDlgItem(IDC_CheckParamSet))->EnableWindow(FALSE); ((CButton*)GetDlgItem(IDC_CheckParamRead))->EnableWindow(FALSE); ((CButton*)GetDlgItem(IDC_BTN_FLATM))->EnableWindow(FALSE); ((CButton*)GetDlgItem(IDC_BTN_BLACKFLAT))->EnableWindow(FALSE); ((CButton*)GetDlgItem(IDC_BTN_EXFLAT))->EnableWindow(FALSE); ((CButton*)GetDlgItem(IDC_BTN_GAINFLAT))->EnableWindow(FALSE); ((CButton*)GetDlgItem(IDC_BTN_FLAT))->EnableWindow(FALSE); ((CButton*)GetDlgItem(IDC_BTN_CONTINUE))->EnableWindow(FALSE); ((CButton*)GetDlgItem(IDC_BUTTON1))->EnableWindow(FALSE); ((CButton*)GetDlgItem(IDC_BTN_PARAMCFG))->EnableWindow(FALSE); ((CButton*)GetDlgItem(IDC_BTN_PAUSE))->EnableWindow(TRUE); iAERMaxStep = iAERMaxStep * 2; if(iAERMaxStep > 900) { iAERMaxStep = 900; } iAERMiddleStep = iAERMaxStep; iAERMinStep = 0; iAEGMaxStep = iAEGMaxStep * 2; if(iAEGMaxStep > 900) { iAEGMaxStep = 900; } iAEGMiddleStep = iAEGMaxStep; iAEGMinStep = 0; iAEBMaxStep = iAEBMaxStep * 2; if(iAEBMaxStep > 900) { iAEBMaxStep = 900; } iAEBMiddleStep = iAEBMaxStep; iAEBMinStep = 0; iBERMaxStep = iBERMaxStep * 2; if(iBERMaxStep > 900) { iBERMaxStep = 900; } iBERMiddleStep = iBERMaxStep; iBERMinStep = 0; iBEGMaxStep = iBEGMaxStep * 2; if(iBEGMaxStep > 900) { iBEGMaxStep = 900; } iBEGMiddleStep = iBEGMaxStep; iBEGMinStep = 0; iBEBMaxStep = iBEBMaxStep * 2; if(iBEBMaxStep > 900) { iBEBMaxStep = 900; } iBEBMiddleStep = iBEBMaxStep; iBEBMinStep = 0; m_pBlack.SetCheck(1); m_pWGain.SetCheck(1); m_bPause = false; } void CHuaGoCorrectDlg::OnBnClickedBtnGainflat() { // TODO: 在此添加控件通知处理程序代码 ((CButton*)GetDlgItem(IDC_CheckParamSet))->EnableWindow(FALSE); ((CButton*)GetDlgItem(IDC_CheckParamRead))->EnableWindow(FALSE); ((CButton*)GetDlgItem(IDC_BTN_FLATM))->EnableWindow(FALSE); ((CButton*)GetDlgItem(IDC_BTN_BLACKFLAT))->EnableWindow(FALSE); ((CButton*)GetDlgItem(IDC_BTN_EXFLAT))->EnableWindow(FALSE); ((CButton*)GetDlgItem(IDC_BTN_GAINFLAT))->EnableWindow(FALSE); ((CButton*)GetDlgItem(IDC_BTN_FLAT))->EnableWindow(FALSE); ((CButton*)GetDlgItem(IDC_BTN_CONTINUE))->EnableWindow(FALSE); ((CButton*)GetDlgItem(IDC_BUTTON1))->EnableWindow(FALSE); ((CButton*)GetDlgItem(IDC_BTN_PARAMCFG))->EnableWindow(FALSE); ((CButton*)GetDlgItem(IDC_BTN_PAUSE))->EnableWindow(TRUE); m_pBlack.SetCheck(1); m_pWExposure.SetCheck(1); m_bPause = false; } void CHuaGoCorrectDlg::OnBnClickedBtnContinue() { // TODO: 在此添加控件通知处理程序代码 ((CButton*)GetDlgItem(IDC_CheckParamSet))->EnableWindow(FALSE); ((CButton*)GetDlgItem(IDC_CheckParamRead))->EnableWindow(FALSE); ((CButton*)GetDlgItem(IDC_BTN_FLATM))->EnableWindow(FALSE); ((CButton*)GetDlgItem(IDC_BTN_BLACKFLAT))->EnableWindow(FALSE); ((CButton*)GetDlgItem(IDC_BTN_EXFLAT))->EnableWindow(FALSE); ((CButton*)GetDlgItem(IDC_BTN_GAINFLAT))->EnableWindow(FALSE); ((CButton*)GetDlgItem(IDC_BTN_FLAT))->EnableWindow(FALSE); ((CButton*)GetDlgItem(IDC_BTN_CONTINUE))->EnableWindow(FALSE); ((CButton*)GetDlgItem(IDC_BUTTON1))->EnableWindow(FALSE); ((CButton*)GetDlgItem(IDC_BTN_PARAMCFG))->EnableWindow(FALSE); ((CButton*)GetDlgItem(IDC_BTN_PAUSE))->EnableWindow(TRUE); m_bPause = false; } void CHuaGoCorrectDlg::OnBnClickedBtnPause() { // TODO: 在此添加控件通知处理程序代码 ((CButton*)GetDlgItem(IDC_CheckParamSet))->EnableWindow(TRUE); ((CButton*)GetDlgItem(IDC_CheckParamRead))->EnableWindow(TRUE); ((CButton*)GetDlgItem(IDC_BTN_FLATM))->EnableWindow(TRUE); ((CButton*)GetDlgItem(IDC_BTN_BLACKFLAT))->EnableWindow(TRUE); ((CButton*)GetDlgItem(IDC_BTN_EXFLAT))->EnableWindow(TRUE); ((CButton*)GetDlgItem(IDC_BTN_GAINFLAT))->EnableWindow(TRUE); ((CButton*)GetDlgItem(IDC_BTN_FLAT))->EnableWindow(TRUE); ((CButton*)GetDlgItem(IDC_BTN_CONTINUE))->EnableWindow(TRUE); ((CButton*)GetDlgItem(IDC_BUTTON1))->EnableWindow(TRUE); ((CButton*)GetDlgItem(IDC_BTN_PARAMCFG))->EnableWindow(TRUE); ((CButton*)GetDlgItem(IDC_BTN_PAUSE))->EnableWindow(FALSE); m_bPause = true; } void CHuaGoCorrectDlg::InitButton() { ((CButton*)GetDlgItem(IDC_CheckParamSet))->EnableWindow(FALSE); ((CButton*)GetDlgItem(IDC_CheckParamRead))->EnableWindow(FALSE); ((CButton*)GetDlgItem(IDC_BTN_FLATM))->EnableWindow(FALSE); ((CButton*)GetDlgItem(IDC_BTN_BLACKFLAT))->EnableWindow(FALSE); ((CButton*)GetDlgItem(IDC_BTN_EXFLAT))->EnableWindow(FALSE); ((CButton*)GetDlgItem(IDC_BTN_GAINFLAT))->EnableWindow(FALSE); ((CButton*)GetDlgItem(IDC_BTN_FLAT))->EnableWindow(FALSE); ((CButton*)GetDlgItem(IDC_BTN_CONTINUE))->EnableWindow(FALSE); ((CButton*)GetDlgItem(IDC_BUTTON1))->EnableWindow(FALSE); ((CButton*)GetDlgItem(IDC_BTN_PARAMCFG))->EnableWindow(TRUE); ((CButton*)GetDlgItem(IDC_BTN_PAUSE))->EnableWindow(FALSE); } void CHuaGoCorrectDlg::OnCbnSelChangeDpi() { // TODO: 在此添加控件通知处理程序代码 m_iDpiIndex = m_ComboxDpi.GetCurSel(); } void CHuaGoCorrectDlg::OnCbnSelChangeColor() { // TODO: 在此添加控件通知处理程序代码 m_iColorIndex = m_ComboxColor.GetCurSel(); if(0 == m_iColorIndex) { m_drv->set_decompress_pix_type(TWPT_GRAY); } else { //m_drv->set_decompress_pix_type(TJPF_BGR); m_drv->set_decompress_pix_type(TWPT_RGB); } } void CHuaGoCorrectDlg::OnBnClickedConfirm() { // TODO: 在此添加控件通知处理程序代码 m_iPicIndex = 0; if (!m_drv->IsConnected()) { MessageBox("扫描仪未连接!"); return; } GetDlgItem(IDC_STATIC_NUM)->SetWindowText("0"); m_drv->DevStateChange(); m_drv->reset(); Scan(); papercount = 0; //切换到tab3 //m_tab.SetCurSel(2); //RefreshTabChange(); } void CHuaGoCorrectDlg::OnBnClickedBtnParamcfg() { // TODO: 在此添加控件通知处理程序代码 if (IDOK == m_ConfigParam.DoModal()) { ConfigParamUpdate(); m_A4Dlg.LoadCfg(); m_A4Dlg.default0param(); ((CButton*)GetDlgItem(IDC_CheckParamSet))->EnableWindow(TRUE); ((CButton*)GetDlgItem(IDC_CheckParamRead))->EnableWindow(TRUE); ((CButton*)GetDlgItem(IDC_BTN_FLATM))->EnableWindow(TRUE); ((CButton*)GetDlgItem(IDC_BTN_BLACKFLAT))->EnableWindow(TRUE); ((CButton*)GetDlgItem(IDC_BTN_EXFLAT))->EnableWindow(TRUE); ((CButton*)GetDlgItem(IDC_BTN_GAINFLAT))->EnableWindow(TRUE); ((CButton*)GetDlgItem(IDC_BTN_FLAT))->EnableWindow(TRUE); ((CButton*)GetDlgItem(IDC_BTN_CONTINUE))->EnableWindow(TRUE); ((CButton*)GetDlgItem(IDC_BUTTON1))->EnableWindow(TRUE); ((CButton*)GetDlgItem(IDC_BTN_PARAMCFG))->EnableWindow(TRUE); ((CButton*)GetDlgItem(IDC_BTN_PAUSE))->EnableWindow(TRUE); } } void CHuaGoCorrectDlg::ConfigParamUpdate() { iAMaxStep = m_ConfigParam.m_AMaxStep; iAMiddleStep = iAMaxStep; iAMinStep = m_ConfigParam.m_AMinStep; iBMaxStep = m_ConfigParam.m_BMaxStep; iBMiddleStep = iBMaxStep; iBMinStep = m_ConfigParam.m_BMinStep; iAERMaxStep = m_ConfigParam.m_AERMaxStep; iAERMiddleStep = iAERMaxStep; iAERMinStep = m_ConfigParam.m_AERMinStep; iAEGMaxStep = m_ConfigParam.m_AEGMaxStep; iAEGMiddleStep = iAEGMaxStep; iAEGMinStep = m_ConfigParam.m_AEGMinStep; iAEBMaxStep = m_ConfigParam.m_AEBMaxStep; iAEBMiddleStep = iAEBMaxStep; iAEBMinStep = m_ConfigParam.m_AEBMinStep; iBERMaxStep = m_ConfigParam.m_BERMaxStep; iBERMiddleStep = iBERMaxStep; iBERMinStep = m_ConfigParam.m_BERMinStep; iBEGMaxStep = m_ConfigParam.m_BEGMaxStep; iBEGMiddleStep = iBEGMaxStep; iBEGMinStep = m_ConfigParam.m_BEGMinStep; iBEBMaxStep = m_ConfigParam.m_BEBMaxStep; iBEBMiddleStep = iBEBMaxStep; iBEBMinStep = m_ConfigParam.m_BEBMinStep; iGainStep = m_ConfigParam.m_GainStep; } afx_msg LRESULT CHuaGoCorrectDlg::OnMyMessage(/*HWND hWnd, UINT Msg, */ WPARAM wParam, LPARAM lParam) { CString sParam = ""; int nParam = 0; nParam = wParam; sParam.Format(_T("%d"),nParam); if(nParam != 200) { GetDlgItem(IDC_STATIC_NUM)->SetWindowText(sParam); CString sMessage; sMessage.Format("当前扫描第%s张图片,累计消耗时间%s%s%s",sParam,s_hour,s_minute,s_second); WriteLog(sMessage); } else { KillTimer(N_TIMER_SEC); KillTimer(N_TIMER_SHOW); // GetDlgItem(IDC_STATIC_SHOW)->SetWindowText(_T("校正完成")); // Sleep(5000); // FSongleCorrect(); } return 0; } void CHuaGoCorrectDlg::OnBnClickedStopScan() { // TODO: 在此添加控件通知处理程序代码 b_suspend =!b_suspend; if (b_suspend) { KillTimer(N_TIMER_SEC); KillTimer(N_TIMER_SHOW); int h1, h2, m1, m2, s1, s2; h1 = n_hour / 10; h2 = n_hour % 10; m1 = n_minute / 10; m2 = n_minute % 10; s1 = n_second / 10; s2 = n_second % 10; s_hour.Format("%d%d", h1, h2); s_minute.Format("%d%d", m1, m2); s_second.Format("%d%d", s1, s2); UpdateData(FALSE); } m_drv->Stop_scan(); // else // { // SetTimer(N_TIMER_SEC, N_TIME_SEC, NULL); // SetTimer(N_TIMER_SHOW, N_TIME_SHOW, NULL); // } } void CHuaGoCorrectDlg::OnTimer(UINT_PTR nIDEvent) { // TODO: 在此添加消息处理程序代码和/或调用默认值 switch (nIDEvent) { case 1: { if (b_review == FALSE) { n_second++; if (n_second == 60) { n_second = 0; n_minute++; } if (n_minute == 60) { n_minute = 0; n_hour++; } /* if (n_hour == 1) n_hour = 0; if (n_minute == 5) b_review = TRUE;*/ } else if (b_review) { n_hour = 0; n_minute = 0; n_second = 0; s_hour.Format("%s", "Re"); s_minute.Format("%s", "vi"); s_second.Format("%s", "ew"); } } case 2: { if (b_review == FALSE) { int h1, h2, m1, m2, s1, s2; h1 = n_hour / 10; h2 = n_hour % 10; m1 = n_minute / 10; m2 = n_minute % 10; s1 = n_second / 10; s2 = n_second % 10; s_hour.Format("%d%d", h1, h2); s_minute.Format("%d%d", m1, m2); s_second.Format("%d%d", s1, s2); } else if (b_review) { n_hour = 0; n_minute = 0; n_second = 0; s_hour.Format("%s", "Re"); s_minute.Format("%s", "vi"); s_second.Format("%s", "ew"); } UpdateData(FALSE); } default: break; } CDialogEx::OnTimer(nIDEvent); } void CHuaGoCorrectDlg::OnCbnSelchangeCombo1() { // TODO: 在此添加控件通知处理程序代码 CString num; CString text; int cursel = Version.GetCurSel(); num.Format("%d", cursel); if(m_drv->isusbopened()) m_drv->close(); if(m_drv->device_id==0) MessageBox(TEXT("未找到设备!"), TEXT("提示"), MB_OK | MB_ICONWARNING); m_drv->open(Version_id[cursel][0], Version_id[cursel][1], 0); if (!m_drv->isusbopened()) MessageBox(TEXT("未找到设备!"), TEXT("提示"), MB_OK | MB_ICONWARNING); ::WritePrivateProfileString(_T("USB"), _T("Version_num"), _T(num), INI_FILE_NAME); }