| | |
| | | #include "StdAfx.h" |
| | | #include "StdAfx.h" |
| | | #include "InterfaceManager.h" |
| | | #include "MulticamControl.h" |
| | | #include "RadientControl.h" |
| | |
| | | m_pThread_SendMSG = NULL; |
| | | m_pThread_CheckSequence = NULL; |
| | | m_pThread_ViewRefresh = NULL; |
| | | m_pSaveFullImgThread = NULL; |
| | | m_nScanStartCount = 0; |
| | | m_bGlassLoadingEnd = FALSE; |
| | | m_pLicense = NULL; |
| | |
| | | |
| | | BOOL CInterfaceManager::DestroyThread() |
| | | { |
| | | if(m_pThread_SendMSG != NULL) |
| | | { |
| | | if(m_pThread_SendMSG != nullptr) { |
| | | m_pThread_SendMSG->StopThread(); |
| | | delete m_pThread_SendMSG; |
| | | } |
| | | m_pThread_SendMSG = NULL; |
| | | m_pThread_SendMSG = nullptr; |
| | | |
| | | if(m_pThread_CheckSequence != NULL) |
| | | { |
| | | if(m_pThread_CheckSequence != nullptr) { |
| | | m_pThread_CheckSequence->StopThread(); |
| | | delete m_pThread_CheckSequence; |
| | | } |
| | | m_pThread_CheckSequence = NULL; |
| | | m_pThread_CheckSequence = nullptr; |
| | | |
| | | if(m_pThread_ViewRefresh != NULL) |
| | | { |
| | | if(m_pThread_ViewRefresh != nullptr) { |
| | | m_pThread_ViewRefresh->StopThread(); |
| | | delete m_pThread_ViewRefresh; |
| | | } |
| | | m_pThread_ViewRefresh = NULL; |
| | | m_pThread_ViewRefresh = nullptr; |
| | | |
| | | if (m_pSaveFullImgThread != nullptr) { |
| | | m_pSaveFullImgThread->StopThread(); |
| | | delete m_pSaveFullImgThread; |
| | | } |
| | | m_pSaveFullImgThread = nullptr; |
| | | |
| | | return TRUE; |
| | | } |
| | |
| | | return 0; |
| | | } |
| | | |
| | | // End Signal阑 PLC俊辑 肋 给罐酒辑 Retry 持菌澜 |
| | | // End Signal阑 PLC俊辑 肋 给罐酒辑 Retry 持菌澜 |
| | | void CInterfaceManager::PLCSignalRetry(SEND_MESSAGE_SECTION emSection,InspectToControlSignal emSendSignal,enInterface_Send_Control emControlSignal) |
| | | { |
| | | if(m_HardwareRecipe.m_nPLCSignalRetry <= 0) |
| | |
| | | |
| | | BOOL CInterfaceManager::PostProcess() |
| | | { |
| | | g_pLog->DisplayMessage(_T("Start PostProcess()")); |
| | | g_pLog->DisplayMessage(_T("Start PostProcess")); |
| | | |
| | | if(m_pThread_CheckSequence != NULL) |
| | | if (m_pThread_CheckSequence != NULL) { |
| | | m_pThread_CheckSequence->ClearMessage(); |
| | | } |
| | | |
| | | if(m_GlassData.IsPostProcStart() == TRUE) |
| | | { |
| | | if(m_GlassData.IsPostProcStart() == TRUE) { |
| | | g_pLog->DisplayMessage(_T("Already Post Processing Start")); |
| | | return TRUE; |
| | | } |
| | |
| | | m_PostProcess.SetView((void*) m_pView); |
| | | m_PostProcess.RunPostProcessing(); |
| | | |
| | | // 馆靛矫 Scan End 脚龋 焊郴扁 傈俊 秦拎具茄促... Scan End 脚龋 焊尘锭 Loading捞 肯丰 救登搁 救焊郴瘤霸 阜囚乐澜.. |
| | | m_bGlassLoadingEnd = FALSE; |
| | | m_bPLCGlassLoading = FALSE; |
| | | |
| | |
| | | |
| | | SetSlashText(GLOBAL_DEFINE::emHide, _T(""), RGB(0, 0, 0)); |
| | | |
| | | if (m_pView != NULL) |
| | | { |
| | | if (m_pView != NULL) { |
| | | m_pView->SetGlassData(&m_GlassData); |
| | | m_pView->RefreshDefect(m_PostProcess.GetResultPath(EM_RESULT_DEFECT)); |
| | | |
| | | if (m_pThread_ViewRefresh != NULL) |
| | | { |
| | | if (m_pThread_ViewRefresh != NULL) { |
| | | m_pThread_ViewRefresh->AddViewMSG(0, 0, VIEW_REFRESH_INSPECT_END, 0); |
| | | } |
| | | } |
| | | |
| | | //CheckExpireDay(); // Check License Defect.. |
| | | WritePLCResult(); |
| | | |
| | | // Loading Ack |
| | | // m_pControlInterface->SendControlBit(emSnd_Short_ScanEnd_Ack, TRUE); |
| | | |
| | | if (m_pThread_SendMSG != NULL) |
| | | if (m_pThread_SendMSG != NULL) { |
| | | m_pThread_SendMSG->AddSendMSG(SEND_MESSAGE_CONTROLSIGNAL, IToC_Ack_ShortScanEndSuccess, TRUE); |
| | | } |
| | | |
| | | if (0 == nDefectCount) |
| | | { |
| | | AfxBeginThread(CopyImageThreadFunc, this); |
| | | } |
| | | else |
| | | { |
| | | Save_FullImg(); |
| | | } |
| | | Save_FullImg(); |
| | | |
| | | #if MINI_LED |
| | | m_PostProcess.RunPostProcessing_SaveFiltImage(); |
| | |
| | | { |
| | | CInterfaceManager *pMain = static_cast<CInterfaceManager*>(pParam); |
| | | |
| | | pMain->Save_FullImg(); |
| | | pMain->Save_FullImg(); |
| | | |
| | | return 0; |
| | | } |
| | |
| | | DWORD dwTick = GetTickCount(); |
| | | g_pLog->DisplayMessage(_T("Full Image Save Start")); |
| | | |
| | | int iCam,iScan; |
| | | CHardwareSettings *pHard = &m_HardwareRecipe; |
| | | CCameraSettings *pCamera; |
| | | CGlassRecipe *pGlsRcp = &m_GlassRecipe; |
| | | CString strFolder,strFileJpg,strPanelID; |
| | | pINSPECTFULLIMAGE_BUFFER pBuffer; |
| | | int nQuality = pHard->m_nSaveImageQuality; |
| | | int iCam, iScan; |
| | | CHardwareSettings* pHard = &m_HardwareRecipe; |
| | | CCameraSettings* pCamera; |
| | | CGlassRecipe* pGlsRcp = &m_GlassRecipe; |
| | | CString strFolder, strFileJpg, strPanelID; |
| | | pINSPECTFULLIMAGE_BUFFER pBuffer; |
| | | int nQuality = pHard->m_nSaveImageQuality; |
| | | |
| | | if (nQuality < 0 || nQuality > 100) { |
| | | nQuality = 30; |
| | |
| | | strPanelID = _T("TestGlass"); |
| | | } |
| | | |
| | | for(iCam=0;iCam<pHard->GetCameraCount();iCam++) { |
| | | for(iScan=0;iScan<MAX_SCAN_COUNT;iScan++) { |
| | | pCamera = pHard->GetCameraSettings(iCam,iScan); |
| | | for (iCam = 0; iCam < pHard->GetCameraCount(); iCam++) { |
| | | for (iScan = 0; iScan < MAX_SCAN_COUNT; iScan++) { |
| | | pCamera = pHard->GetCameraSettings(iCam, iScan); |
| | | if (pCamera == NULL) { |
| | | continue; |
| | | } |
| | | |
| | | pBuffer = m_pInspect[iCam]->GetFullImgBuffer(iScan); |
| | | pBuffer = m_pInspect[iCam]->GetFullImgBuffer(iScan); |
| | | if (pBuffer == NULL) { |
| | | continue; |
| | | } |
| | | |
| | | g_pLog->DisplayMessage(_T("Sava %s iCam=%d, iScan=%d, szImage.cx=%ld, pBuffer->szImage.cy=%ld"), PANEL_SIDE[pCamera->m_eDimension], iCam, iScan, pBuffer->szImage.cx, pBuffer->szImage.cy); |
| | | |
| | | if(pBuffer->pImage != NULL && pBuffer->szImage.cx > 100 && pBuffer->szImage.cy > 100) { |
| | | strFileJpg.Format(_T("%s\\%s_%s_%s.jpg"),strFolder, strPanelID, PANEL_SIDE[pCamera->m_eDimension],g_pBase->m_strLoadingTime); |
| | | SaveFullImageModern(strFileJpg, pBuffer->pImage, pBuffer->szImage.cx, pBuffer->szImage.cy, (int)pCamera->m_eDimension, 0, nQuality); |
| | | } |
| | | if (m_pSaveFullImgThread != nullptr && pBuffer->pImage != nullptr && pBuffer->szImage.cx > 100 && pBuffer->szImage.cy > 100) { |
| | | strFileJpg.Format(_T("%s\\%s_%s_%s.jpg"), strFolder, strPanelID, PANEL_SIDE[pCamera->m_eDimension], g_pBase->m_strLoadingTime); |
| | | |
| | | if (pHard->m_bAsyncFullSave) { |
| | | CT2A aPath(strFileJpg); |
| | | SaveImgJob job; |
| | | job.strPath = std::string(aPath); |
| | | job.nWidth = (int)pBuffer->szImage.cx; |
| | | job.nHeight = (int)pBuffer->szImage.cy; |
| | | job.nBpp = 1; |
| | | job.nStride = job.nWidth * job.nBpp; |
| | | job.nStartY = 0; |
| | | job.nDimension = (int)pCamera->m_eDimension; |
| | | job.nQuality = nQuality; |
| | | |
| | | // 深拷贝 |
| | | DWORD dwCopyStart = GetTickCount(); |
| | | Lock(); |
| | | size_t nBytes = size_t(job.nStride) * job.nHeight; |
| | | job.vData.resize(nBytes); |
| | | memcpy(job.vData.data(), pBuffer->pImage, nBytes); |
| | | Unlock(); |
| | | DWORD dwCopyEnd = GetTickCount(); |
| | | g_pLog->DisplayMessage(_T("Full Image Copy Time = %d ms, Bytes=%zu, File=%s"), dwCopyEnd - dwCopyStart, nBytes, strFileJpg); |
| | | |
| | | // 入队 |
| | | m_pSaveFullImgThread->Enqueue(std::move(job)); |
| | | g_pLog->DisplayMessage(_T("Full Image Save : %s, Width=%d, Height=%d, Dimension=%s, Quality=%d"), strFileJpg, pBuffer->szImage.cx, pBuffer->szImage.cy, PANEL_SIDE[pCamera->m_eDimension], nQuality); |
| | | } |
| | | else { |
| | | DWORD dwCopyStart = GetTickCount(); |
| | | Lock(); |
| | | SaveFullImageModern(strFileJpg, pBuffer->pImage, pBuffer->szImage.cx, pBuffer->szImage.cy, (int)pCamera->m_eDimension, 0, nQuality); |
| | | Unlock(); |
| | | DWORD dwCopyEnd = GetTickCount(); |
| | | g_pLog->DisplayMessage(_T("Full Image Save Time = %d ms, File=%s"), dwCopyEnd - dwCopyStart, strFileJpg); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | g_pLog->DisplayMessage(_T("Full Image Save Completed : Time[%d]"),GetTickCount()-dwTick); |
| | |
| | | |
| | | g_pStatus->m_iScanIdx = 1; |
| | | |
| | | AfxBeginThread(ScanStartCam_0,this); |
| | | AfxBeginThread(ScanStartCam_1,this); |
| | | AfxBeginThread(ScanStartCam_2,this); |
| | | AfxBeginThread(ScanStartCam_3,this); |
| | | AfxBeginThread(ScanStartCam_0, this); |
| | | AfxBeginThread(ScanStartCam_1, this); |
| | | AfxBeginThread(ScanStartCam_2, this); |
| | | AfxBeginThread(ScanStartCam_3, this); |
| | | |
| | | if (m_HardwareRecipe.m_bUseRipInspection) { |
| | | AfxBeginThread(ScanStartCam_4, this); |
| | | AfxBeginThread(ScanStartCam_5, this); |
| | | } |
| | | |
| | | AfxBeginThread(CheckScanStart,this); |
| | | } |
| | |
| | | |
| | | g_pStatus->m_iScanIdx = 0; |
| | | |
| | | AfxBeginThread(ScanStartCam_0,this); |
| | | AfxBeginThread(ScanStartCam_1,this); |
| | | AfxBeginThread(ScanStartCam_2,this); |
| | | AfxBeginThread(ScanStartCam_3,this); |
| | | AfxBeginThread(ScanStartCam_0, this); |
| | | AfxBeginThread(ScanStartCam_1, this); |
| | | AfxBeginThread(ScanStartCam_2, this); |
| | | AfxBeginThread(ScanStartCam_3, this); |
| | | |
| | | if (m_HardwareRecipe.m_bUseRipInspection) { |
| | | AfxBeginThread(ScanStartCam_4, this); |
| | | AfxBeginThread(ScanStartCam_5, this); |
| | | } |
| | | |
| | | AfxBeginThread(CheckScanStart,this); |
| | | |
| | |
| | | |
| | | UINT CInterfaceManager::CheckScanStart(LPVOID pParam) |
| | | { |
| | | CInterfaceManager *pInter = static_cast<CInterfaceManager*>(pParam); |
| | | CInterfaceManager *pInter = static_cast<CInterfaceManager*>(pParam); |
| | | double CurTime = GetTickCount(); |
| | | |
| | | double CurTime = GetTickCount(); |
| | | |
| | | do |
| | | { |
| | | if (GetTickCount() - CurTime > 10000) |
| | | { |
| | | do { |
| | | if (GetTickCount() - CurTime > 10000) { |
| | | g_pLog->DisplayMessage(_T("Scan Start Ack TimeOut : Scan %d-%d"),g_pStatus->m_iScanIdx,pInter->m_nScanStartCount); |
| | | break; |
| | | } |
| | | |
| | | if(pInter->m_nScanStartCount == MAX_CAMERA_COUNT) |
| | | { |
| | | if(pInter->m_nScanStartCount == MAX_CAMERA_COUNT) { |
| | | g_pLog->DisplayMessage(_T("Scan Start Ack Ok : Scan %d-%d"),g_pStatus->m_iScanIdx,pInter->m_nScanStartCount); |
| | | break; |
| | | } |
| | |
| | | } while (1); |
| | | |
| | | g_pLog->DisplayMessage(_T("Scan Start Ack Signal Send : Scan %d-%d"),g_pStatus->m_iScanIdx,pInter->m_nScanStartCount); |
| | | if(g_pStatus->m_iScanIdx == 0) |
| | | { |
| | | if(g_pStatus->m_iScanIdx == 0) { |
| | | if(pInter->m_pThread_SendMSG != NULL) |
| | | pInter->m_pThread_SendMSG->AddSendMSG(SEND_MESSAGE_CONTROLSIGNAL,IToC_Ack_LongScanStartSuccess,TRUE); |
| | | } |
| | | else |
| | | { |
| | | else { |
| | | if(pInter->m_pThread_SendMSG != NULL) |
| | | pInter->m_pThread_SendMSG->AddSendMSG(SEND_MESSAGE_CONTROLSIGNAL,IToC_Ack_ShortScanStartSuccess,TRUE); |
| | | } |
| | |
| | | int nPeriod = m_HardwareRecipe.m_nFreerunPeriod; |
| | | int nExposureTime = m_HardwareRecipe.m_nFreerunExposureTime; |
| | | |
| | | CCameraSettings *pCamSettings = m_HardwareRecipe.GetCameraSettings(iCam,g_pStatus->m_iScanIdx); |
| | | |
| | | g_pStatus->SetGrabFrametoScan(g_pStatus->m_iScanIdx,pCamSettings->m_nGrabFrameCount); |
| | | if(m_pGrabber[iCam] != NULL) |
| | | { |
| | | m_pGrabber[iCam]->GrabScanStart(g_pStatus->m_iScanIdx,bFreerun,nPeriod,nExposureTime); |
| | | CCameraSettings* pCamSettings = m_HardwareRecipe.GetCameraSettings(iCam, g_pStatus->m_iScanIdx); |
| | | g_pStatus->SetGrabFrametoScan(iCam, g_pStatus->m_iScanIdx, pCamSettings->m_nGrabFrameCount); |
| | | if(m_pGrabber[iCam] != NULL) { |
| | | m_pGrabber[iCam]->GrabScanStart(g_pStatus->m_iScanIdx, bFreerun, nPeriod, nExposureTime); |
| | | g_pLog->DisplayMessage(_T("Cam %d Scan %d Grab Start : GrabFrameCount %d"), iCam, g_pStatus->m_iScanIdx, pCamSettings->m_nGrabFrameCount); |
| | | g_pLog->DisplayMessage(_T("Cam %d Scan %d Grab Start : bFreerun %d, nPeriod %d, nExposureTime %d"),iCam, g_pStatus->m_iScanIdx, bFreerun, nPeriod, nExposureTime); |
| | | } |
| | | |
| | | if(m_pInspect[iCam] != NULL) |
| | | { |
| | | if(m_pInspect[iCam] != NULL) { |
| | | m_pInspect[iCam]->SetSimulation(FALSE); |
| | | m_pInspect[iCam]->SetViewScanHWnd(m_pView->GetViewScanHWnd()); |
| | | |
| | | if(m_pInspect[iCam]->ScanStart(g_pStatus->m_iScanIdx) == FALSE) |
| | | { |
| | | if(m_pInspect[iCam]->ScanStart(g_pStatus->m_iScanIdx) == FALSE) { |
| | | g_pLog->DisplayMessage(_T("Cam %d Scan %d Start Fail"),iCam,g_pStatus->m_iScanIdx); |
| | | } |
| | | } |
| | |
| | | CInterfaceManager *pInter = static_cast<CInterfaceManager*>(pParam); |
| | | |
| | | pInter->ScanStartCamera(3); |
| | | |
| | | return 0; |
| | | } |
| | | |
| | | UINT CInterfaceManager::ScanStartCam_4(LPVOID pParam) |
| | | { |
| | | CInterfaceManager* pInter = static_cast<CInterfaceManager*>(pParam); |
| | | |
| | | pInter->ScanStartCamera(4); |
| | | |
| | | return 0; |
| | | } |
| | | |
| | | UINT CInterfaceManager::ScanStartCam_5(LPVOID pParam) |
| | | { |
| | | CInterfaceManager* pInter = static_cast<CInterfaceManager*>(pParam); |
| | | |
| | | pInter->ScanStartCamera(5); |
| | | |
| | | return 0; |
| | | } |
| | |
| | | if(!m_strReserveRecipe.IsEmpty()) |
| | | { |
| | | g_pLog->DisplayMessage(_T("Apply reserve Recipe Loading - [%s]"), m_strReserveRecipe); |
| | | if (LoadGlassRecipe(m_strReserveRecipe,TRUE)) // 鞍篮 Recipe扼档 利侩 抗距登绢 乐栏搁 促矫 肺爹茄促. |
| | | if (LoadGlassRecipe(m_strReserveRecipe,TRUE)) // 鞍篮 Recipe扼档 利侩 抗距登绢 乐栏搁 促矫 肺爹茄促. |
| | | { |
| | | g_pLog->DisplayMessage(_T("Apply reserve Recipe Loading - [%s] : Success"), m_strReserveRecipe); |
| | | } |
| | |
| | | return FALSE; |
| | | } |
| | | |
| | | if (strRcp.CompareNoCase(m_GlassRecipe.GetRecipeName()) != 0) // strRecipeName 官差搁 肺爹茄促. |
| | | if (strRcp.CompareNoCase(m_GlassRecipe.GetRecipeName()) != 0) // strRecipeName 官差搁 肺爹茄促. |
| | | { |
| | | if (LoadGlassRecipe(strRcp,TRUE) == FALSE) |
| | | { |
| | |
| | | BlVision_GetVisionRecipe()->setRecipeType(EI_VISION_RECIPE); |
| | | BlVision_GetVisionRecipe()->init(); |
| | | |
| | | for (int i = 0; i < nCount; i++) { //设置分辨率 |
| | | for (int i = 0; i < nCount; i++) { //设置分辨率 |
| | | DimensionDir eDir = (DimensionDir)(i); |
| | | CBlSideData *pSide = BlVision_GetVisionRecipe()->getSideData(eDir); |
| | | |
| | |
| | | g_pLog->DisplayMessage( _T("CreateCamera Start!")); |
| | | |
| | | ////////////////////////////////////////////////////////////////////////// |
| | | // Camera Handle 积己. |
| | | // Camera Handle 积己. |
| | | int iCam; |
| | | BOOL bRet = TRUE; |
| | | |
| | |
| | | Param.nScanCount = g_pBase->m_nScanCount; |
| | | Param.nBoardIdx = g_pBase->m_nBoardID[iCam]; |
| | | Param.nBoardCh = g_pBase->m_nBoardCh[iCam]; |
| | | Param.nImgFlipX = 0; |
| | | Param.nBoardCh = 0; |
| | | Param.nImgFlipX = 0; |
| | | Param.nCameraIdx = iCam; |
| | | Param.nCameraScan = 0; |
| | | |
| | |
| | | int nErrorCode; |
| | | int nBoardId = iCam; |
| | | |
| | | // B5 4龋扁 悸泼 |
| | | // B5 4龋扁 悸泼 |
| | | g_pBase->m_strSBKLine = m_HardwareRecipe.GetLineID(); |
| | | g_pBase->m_strSBKLine.Append(_T("#")); |
| | | |
| | |
| | | Param.nBoardIdx = nBoardId; |
| | | } |
| | | |
| | | if(Param.nBoardIdx < 0) |
| | | if (Param.nBoardIdx < 0) { |
| | | Param.nBoardIdx = nBoardId; |
| | | } |
| | | |
| | | g_pLog->DisplayMessage( _T("Grabber Board ID[%d-%d]-Init"), Param.nBoardIdx, iCam); |
| | | |
| | |
| | | void CInterfaceManager::CreateThread() |
| | | { |
| | | m_pThread_SendMSG = new CThread_SendMSG(); |
| | | if(m_pThread_SendMSG != NULL) |
| | | { |
| | | if(m_pThread_SendMSG != NULL) { |
| | | m_pThread_SendMSG->SetIN2P(static_cast<IPLCSendInterface2Parent*>(this)); |
| | | m_pThread_SendMSG->CreateThread(); |
| | | } |
| | | |
| | | m_pThread_CheckSequence = new CThread_CheckSequence(); |
| | | if(m_pThread_CheckSequence != NULL) |
| | | { |
| | | if(m_pThread_CheckSequence != NULL) { |
| | | m_pThread_CheckSequence->SetC2M(static_cast<ICheckSequenceInterface2Parent*>(this),&m_GlassData); |
| | | m_pThread_CheckSequence->CreateThread(); |
| | | } |
| | | |
| | | m_pThread_ViewRefresh = new CThread_ViewRefresh(); |
| | | if(m_pThread_ViewRefresh != NULL) |
| | | { |
| | | if(m_pThread_ViewRefresh != NULL) { |
| | | m_pThread_ViewRefresh->SetIN2P(static_cast<IViewRefreshInterface2Parent*>(this)); |
| | | m_pThread_ViewRefresh->CreateThread(); |
| | | } |
| | | |
| | | /* |
| | | m_pThread_NetMSG = new CThread_NetMSG(); |
| | | if(m_pThread_NetMSG != NULL) |
| | | { |
| | | m_pThread_NetMSG->SetIN2P(static_cast<IPLCReceiveInterface2Parent*>(this)); |
| | | m_pThread_NetMSG->CreateThread(); |
| | | m_pSaveFullImgThread = new CThread_SaveFullImg(); |
| | | if (m_pSaveFullImgThread != NULL) { |
| | | m_pSaveFullImgThread->CreateThread(); |
| | | } |
| | | |
| | | |
| | | |
| | | m_pThread_Light = new CThread_Light(); |
| | | if(m_pThread_Light != NULL) |
| | | { |
| | | m_pThread_Light->CreateThread(); |
| | | } |
| | | */ |
| | | } |
| | | |
| | | LPBYTE CInterfaceManager::GetGrabBuffer(DimensionDir eDir,int iVline) |
| | |
| | | strSavePath += _T(".jpg"); |
| | | |
| | | Lock(); |
| | | FIBITMAP* bitmap = FreeImage_Allocate(IMAGE_WIDTH, nLineCnt, 8); |
| | | FIBITMAP* bitmap = nullptr; |
| | | int nImageWidth = IMAGE_WIDTH; |
| | | if (iSide > DIMENSION_D_DN) { |
| | | nImageWidth = IMAGE_WIDTH / 2; |
| | | } |
| | | bitmap = FreeImage_Allocate(nImageWidth, nLineCnt, 8); |
| | | |
| | | if (bitmap == NULL) { |
| | | Unlock(); |
| | | return FALSE; |
| | |
| | | return FALSE; |
| | | } |
| | | |
| | | CopyMemory(pBitBuffer, lpImg, IMAGE_WIDTH * nLineCnt); |
| | | CopyMemory(pBitBuffer, lpImg, nImageWidth * nLineCnt); |
| | | |
| | | USES_CONVERSION; |
| | | char str_filename[1024]; |
| | |
| | | FreeImage_Unload(bitmap); |
| | | |
| | | Unlock(); |
| | | |
| | | return TRUE; |
| | | } |
| | | |
| | | BOOL CInterfaceManager::SaveFullImageModern(CString strPath,LPBYTE lpOrigin,int nImgWidth,int nImgHeight,int iSide,int nStartY,int nQuality /*= 80*/) |
| | |
| | | double tmp = 70 / 100.0; |
| | | double dRatio = 1. - tmp; |
| | | dRatio = dRatio - 0.01 < 0.0 ? 1.0 : dRatio; |
| | | |
| | | g_pLog->DisplayMessage(_T("Save Full Image Start(%s, %s, %d, %d, %d)"), strPath, PANEL_SIDE[iSide], nStartY, nImgHeight, nQuality); |
| | | |
| | | #if 0 |
| | | IplImage* pImg = cvCreateImageHeader(cvSize(nImgWidth, nImgHeight), 8, 1); |
| | |
| | | cvReleaseImageHeader(&pImg); |
| | | #else |
| | | Lock(); |
| | | // 原始图像数据转 cv::Mat |
| | | // 原始图像数据转 cv::Mat |
| | | cv::Mat origin(nImgHeight, nImgWidth, CV_8UC1, lpOrigin + (nImgWidth * nStartY)); |
| | | |
| | | // 缩放图像 |
| | | // 缩放图像 |
| | | cv::Size szNew(static_cast<int>(nImgWidth * dRatio), static_cast<int>(nImgHeight * dRatio)); |
| | | cv::Mat resized; |
| | | cv::resize(origin, resized, szNew, 0, 0, cv::INTER_LINEAR); |
| | | |
| | | // 设置 JPEG 压缩参数 |
| | | // 设置 JPEG 压缩参数 |
| | | std::vector<int> params = { |
| | | cv::IMWRITE_JPEG_QUALITY, |
| | | nQuality |
| | |
| | | strPath.Append(_T("_NG")); |
| | | } |
| | | #else |
| | | // 加载灰度图像 |
| | | // 加载灰度图像 |
| | | std::string strFilename = CT2A(strPath); |
| | | cv::Mat img = cv::imread(strFilename, cv::IMREAD_GRAYSCALE); |
| | | |
| | |
| | | nHeight = img.rows; |
| | | } |
| | | else { |
| | | // 按比例缩放 |
| | | // 按比例缩放 |
| | | const double dRatio = 1.0 - static_cast<double>(IMAGE_COMPRESSRATIO) / 100.0; |
| | | int newWidth = static_cast<int>(img.cols / dRatio); |
| | | int newHeight = static_cast<int>(img.rows / dRatio); |