⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cpecontrol.cpp

📁 阮秋琦的数字图像处理学一书所附的代码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
    wVGAHeight = wImgHeight;
    if ( bZoomMark == FALSE ){
         if ( (winOrgPoint.x + wVGAWidth) > wScreenWidth )
           wVGAWidth = (WORD)((wScreenWidth - winOrgPoint.x)&0xfffc) ;
         if ( (winOrgPoint.y + wVGAHeight) > wScreenHeight )
           wVGAHeight = (WORD)((wScreenHeight - winOrgPoint.y)&0xfffc);
    }
    else {
         wTemp = (wScale - IDM_10_SCALE)*10 + 10;
         wTempWidth = wVGAWidth;
         wTempHeight = wVGAHeight;
         W32_Set_Zoom_Value( (SHORT)wTemp,(SHORT) wTemp, &wTempWidth, &wTempHeight );
         if ( (winOrgPoint.x + wTempWidth) > wScreenWidth )
           return ;
         if ( (winOrgPoint.y + wTempHeight) > wScreenHeight )
           return ;
    }
    wGrabWinX1 = cpeParam[4];
	wGrabWinY1 = cpeParam[5];
    wGrabWinX2 = (WORD)(wVGAWidth - 1 + cpeParam[4]);
	wGrabWinY2 = (WORD)(wVGAHeight - 1 + cpeParam[5]);

    wTotal_Frames = W32_Set_Grab_Window(wGrabWinX1, wGrabWinY1, wGrabWinX2, wGrabWinY2);
    bGrabMark = TRUE;
    //ShowCursor( FALSE );
}

int CCPEControl::RTStop()
{
	bRealGrab=m_pThreadRecord->bRealGrab;
	TRACE("bRealGraab=%d\n",bRealGrab);
	if(bRealGrab==FALSE) return 0;

	bGrabMark = FALSE;
	W32_CPE_Exit_Grab_VGA( (WORD)winOrgPoint.x, (WORD)winOrgPoint.y );
	ShowCursor( TRUE );
	bRealGrab=FALSE;
     if ( bZoomMark == TRUE )
     {
         wTemp = (wScale - IDM_10_SCALE)*10 + 10;
         W32_Set_Zoom_Value( (SHORT)wTemp,(SHORT) wTemp, &wVGAWidth, &wVGAHeight );
     }

     W32_WriteVGA2XMS( (WORD)winOrgPoint.x,(WORD) winOrgPoint.y, wVGAWidth, wVGAHeight, wCurrent_Frame );

     if ( lpDib!=NULL )
	 {
         GlobalUnlock( hglb );
         GlobalFree(hglb);
        }

       if ( bZoomMark == TRUE )
         {
         wTempWidth = wScaleWidth;
         wTempHeight = wScaleHeight;
         }
       else {
         wTempWidth = wImgWidth;
         wTempHeight = wImgHeight;
         }

       dwDibSize = (DWORD)wTempHeight * 3L;
       dwDibSize = dwDibSize * (DWORD)wTempWidth;

       hglb = GlobalAlloc( GHND, dwDibSize );
       if ( hglb == NULL )
         {
		   //MessageBox( hwnd, "Alloc lpDib error!!!", "Error", MB_OK );
           AfxMessageBox("内存空间分配失败!");
		   return 0;
         }
       lpDib = (BYTE *)GlobalLock( hglb );

       if (lpDib != NULL) {
         if ( W32_ReadXMS2Buf( wCurrent_Frame, lpDib) < 0 )
           {
          // MessageBox( hwnd, "Sorry, ReadXMS2Buf error!!!", "Error", MB_OK );
             AfxMessageBox("读取采集数据失败!"); 
			 return 0;
           }

	   }
	   return 0;

}

void CCPEControl::CPEExit()
{
	  W32_Close_CPE1000();
	if(m_pThreadRecord!=NULL){
		delete m_pThreadRecord;
		m_pThreadRecord=NULL;
	}
	if (lpDib != NULL){
         GlobalUnlock( hglb );
         GlobalFree( hglb );
		 lpDib=NULL;
	 }
	if (lpMark != NULL){
		 free(lpMark);
		 lpMark=NULL;
	}
}


void CCPEControl::ModifyContrast(int nContrast)
{
	if(nContrast>127)nContrast=127;
	if(nContrast<0)nContrast=0;
	m_MCpeParam[0]=nContrast;
	W32_Modify_Contrast( (BYTE)nContrast);
	//W32_Modify_Brightness( (BYTE)cpeParam[1] );
	//W32_Modify_Saturate( (BYTE)cpeParam[2] ); 
	//W32_Modify_Hue( (BYTE)cpeParam[3] ); 
    if ( bRealGrab ) {
		W32_CPE_Exit_Grab_VGA( (WORD)videoX, (WORD)videoY );
        bRealGrab = FALSE;
		wGrabWinX1 = cpeParam[4];
        wGrabWinY1 = cpeParam[5];
		wGrabWinX2 = wVGAWidth - 1 + cpeParam[4];
		wGrabWinY2 = wVGAHeight - 1 + cpeParam[5];
        W32_Set_Grab_Window(wGrabWinX1, wGrabWinY1, wGrabWinX2, wGrabWinY2);
        W32_CPE_RealGrab_VGA((WORD)videoX, (WORD)videoY);
		bRealGrab = TRUE;
    }
}

void CCPEControl::ModifyBright(int nBright)
{
    if(nBright>255)nBright=255;
	if(nBright<0)nBright=0;
	m_MCpeParam[1]=nBright;
	//W32_Modify_Contrast( (BYTE)nBright);
	W32_Modify_Brightness( (BYTE)nBright);
	//W32_Modify_Saturate( (BYTE)cpeParam[2] ); 
	//W32_Modify_Hue( (BYTE)cpeParam[3] ); 
    if ( bRealGrab ) {
		W32_CPE_Exit_Grab_VGA( (WORD)videoX, (WORD)videoY );
        bRealGrab = FALSE;
		wGrabWinX1 = cpeParam[4];
        wGrabWinY1 = cpeParam[5];
		wGrabWinX2 = wVGAWidth - 1 + cpeParam[4];
		wGrabWinY2 = wVGAHeight - 1 + cpeParam[5];
        W32_Set_Grab_Window(wGrabWinX1, wGrabWinY1, wGrabWinX2, wGrabWinY2);
        W32_CPE_RealGrab_VGA((WORD)videoX, (WORD)videoY);
		bRealGrab = TRUE;
    }
}

void CCPEControl::ModifySaturate(int nSaturate)
{
    if(nSaturate>127)nSaturate=127;
	if(nSaturate<0)nSaturate=0;
	m_MCpeParam[2]=nSaturate;
	//W32_Modify_Contrast( (BYTE)nContrast);
	//W32_Modify_Brightness( (BYTE)cpeParam[1] );
	W32_Modify_Saturate( (BYTE)nSaturate ); 
	//W32_Modify_Hue( (BYTE)cpeParam[3] ); 
    if ( bRealGrab ) {
		W32_CPE_Exit_Grab_VGA( (WORD)videoX, (WORD)videoY );
        bRealGrab = FALSE;
		wGrabWinX1 = cpeParam[4];
        wGrabWinY1 = cpeParam[5];
		wGrabWinX2 = wVGAWidth - 1 + cpeParam[4];
		wGrabWinY2 = wVGAHeight - 1 + cpeParam[5];
        W32_Set_Grab_Window(wGrabWinX1, wGrabWinY1, wGrabWinX2, wGrabWinY2);
        W32_CPE_RealGrab_VGA((WORD)videoX, (WORD)videoY);
		bRealGrab = TRUE;
    }
}

void CCPEControl::ModifyHue(int nHue)
{
    if(nHue>127)nHue=127;
	if(nHue<0)nHue=0;
	m_MCpeParam[3]=nHue;
	//W32_Modify_Contrast( (BYTE)nContrast);
	//W32_Modify_Brightness( (BYTE)cpeParam[1] );
	//W32_Modify_Saturate( (BYTE)nSaturate ); 
	W32_Modify_Hue( (BYTE)nHue); 
    if ( bRealGrab ) {
		W32_CPE_Exit_Grab_VGA( (WORD)videoX, (WORD)videoY );
        bRealGrab = FALSE;
		wGrabWinX1 = cpeParam[4];
        wGrabWinY1 = cpeParam[5];
		wGrabWinX2 = wVGAWidth - 1 + cpeParam[4];
		wGrabWinY2 = wVGAHeight - 1 + cpeParam[5];
        W32_Set_Grab_Window(wGrabWinX1, wGrabWinY1, wGrabWinX2, wGrabWinY2);
        W32_CPE_RealGrab_VGA((WORD)videoX, (WORD)videoY);
		bRealGrab = TRUE;
    }
}

void CCPEControl::ModifyWinX(int nWinX)
{
  W32_Modify_Contrast( (BYTE)cpeParam[0] );
  W32_Modify_Brightness( (BYTE)cpeParam[1] );
  W32_Modify_Saturate( (BYTE)cpeParam[2]  ); 
  W32_Modify_Hue( (BYTE)cpeParam[3] ); 
  if(nWinX>127) nWinX=127;
  if(nWinX<0)   nWinX=0;
  m_MCpeParam[4]=nWinX;
  if ( bRealGrab ) {
		W32_CPE_Exit_Grab_VGA( (WORD)videoX, (WORD)videoY );
        bRealGrab = FALSE;
		wGrabWinX1 = nWinX;
        wGrabWinY1 = m_MCpeParam[5];
		wGrabWinX2 = wVGAWidth - 1 +nWinX;
		wGrabWinY2 = wVGAHeight - 1 + m_MCpeParam[5];
        W32_Set_Grab_Window(wGrabWinX1, wGrabWinY1, wGrabWinX2, wGrabWinY2);
		W32_CPE_RealGrab_VGA((WORD)videoX, (WORD)videoY);
		bRealGrab = TRUE;
    }
}

void CCPEControl::ModifyWinY(int nWinY)
{
  W32_Modify_Contrast( (BYTE)cpeParam[0] );
  W32_Modify_Brightness( (BYTE)cpeParam[1] );
  W32_Modify_Saturate( (BYTE)cpeParam[2]  ); 
  W32_Modify_Hue( (BYTE)cpeParam[3] ); 
  if(nWinY>127) nWinY=127;
  if(nWinY<0)   nWinY=0;
  m_MCpeParam[5]=nWinY;
  if ( bRealGrab ) {
		W32_CPE_Exit_Grab_VGA( (WORD)videoX, (WORD)videoY );
        bRealGrab = FALSE;
		wGrabWinX1 = m_MCpeParam[4];
        wGrabWinY1 = m_MCpeParam[5];
		wGrabWinX2 = wVGAWidth - 1 +m_MCpeParam[4];
		wGrabWinY2 = wVGAHeight - 1 + m_MCpeParam[5];
        W32_Set_Grab_Window(wGrabWinX1, wGrabWinY1, wGrabWinX2, wGrabWinY2);
        W32_CPE_RealGrab_VGA((WORD)videoX, (WORD)videoY);
		bRealGrab = TRUE;
  }
}

void CCPEControl::WriteProfile()
{
  CString strIniFile;
  char szbuf[10];
  
  strIniFile=AfxGetApp()->m_pszHelpFilePath;
  strIniFile=strIniFile.Left(strIniFile.ReverseFind('\\')+1);
  strIniFile+="ca-c100.ini";
    
  wsprintf( szbuf, "%d", m_MCpeParam[0] );
  WritePrivateProfileString( "Parameters", "Contrast", szbuf, strIniFile );
  
  wsprintf( szbuf, "%d", m_MCpeParam[1] );
  WritePrivateProfileString( "Parameters", "Brightness", szbuf, strIniFile );
  
  wsprintf( szbuf, "%d", m_MCpeParam[2] );
  WritePrivateProfileString( "Parameters", "Saturate", szbuf, strIniFile );
  
  wsprintf( szbuf, "%d", m_MCpeParam[3] );
  WritePrivateProfileString( "Parameters", "Hue", szbuf, strIniFile );
  
  wsprintf( szbuf, "%d", m_MCpeParam[4] );
  TRACE("m_MCpeParam[4]=%d\n",m_MCpeParam[4] );
  WritePrivateProfileString( "StartPoint", "X_Start", szbuf, strIniFile );
  
  wsprintf( szbuf, "%d", m_MCpeParam[5] );
  TRACE("m_MCpeParam[5]=%d\n",m_MCpeParam[5] );
  WritePrivateProfileString( "StartPoint", "Y_Start", szbuf, strIniFile );

  wsprintf( szbuf, "%d", wCurrent_pixel_Format );
  WritePrivateProfileString( "ImageFormat", "format", szbuf, strIniFile );


}

void CCPEControl::ModifyOK()
{
	bRealGrab=m_pThreadRecord->bRealGrab;
	TRACE("bRealGraab=%d\n",bRealGrab);
	if(bRealGrab==TRUE)
	{
		WriteProfile();
	    RTStop();
		bRealGrab=FALSE;
	}

}

void CCPEControl::ModifyCancel()
{
	bRealGrab=m_pThreadRecord->bRealGrab;
	TRACE("bRealGraab=%d\n",bRealGrab);
	if(bRealGrab==TRUE)
	{
		ModifyParamRestore();
		bRealGrab=FALSE;
	}

}

int CCPEControl::WriteBMPFile()
{
	WORD wFrame;
	wFrame=wCurrent_Frame;
	LPSTR string1="bmp";
	LPSTR string2="*.bmp";
	static char BASED_CODE szFilter[]="Image File(*.bmp)|Data File(*.bmp)|*.bmp||";
	CFileDialog Dlg(FALSE,string1,string2,
		OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,szFilter,NULL);
	if(Dlg.DoModal()!=IDOK) return -1;
	CString FileName;
	FileName=Dlg.GetPathName();


	CFile file;
	if((!file.Open(FileName,CFile::modeCreate|CFile::shareDenyNone|CFile::modeNoTruncate|CFile::modeReadWrite)))
	{
		AfxMessageBox("打开保存文件失败!");
			return -1;
	}
	file.Close();
	 char	 szFileName[260];
	 for(int j=0;j<260;j++)
		 szFileName[j]=0;
     for( j=0;j<FileName.GetLength();j++)
		 szFileName[j]=FileName[j];
     if ( wCurrent_pixel_Format != RGB24_PACKED )
	 {
		   AfxMessageBox("保存格式不是24位真彩色!");
		   return -1;
	 }
	 WORD Frame=1;
     if(W32_WriteXMS2Bmp (szFileName,wFrame)<0)
	 {
		
		 AfxMessageBox("位图文件保存失败!");
		 return -1;
	 }
	 else
	 {
		 AfxMessageBox("位图文件保存成功!");
		 return 0;
	 }
}

void CCPEControl::ModifyParamRestore()
{
	W32_Modify_Contrast( (BYTE)cpeParam[0] );
	W32_Modify_Brightness( (BYTE)cpeParam[1] );
	W32_Modify_Saturate( (BYTE)cpeParam[2] ); 
	W32_Modify_Hue( (BYTE)cpeParam[3] ); 
    if ( bRealGrab ) {
		W32_CPE_Exit_Grab_VGA( (WORD)videoX, (WORD)videoY );
        bRealGrab = FALSE;
		wGrabWinX1 = cpeParam[4];
        wGrabWinY1 = cpeParam[5];
		wGrabWinX2 = wVGAWidth - 1 + cpeParam[4];
		wGrabWinY2 = wVGAHeight - 1 + cpeParam[5];
        W32_Set_Grab_Window(wGrabWinX1, wGrabWinY1, wGrabWinX2, wGrabWinY2);
        W32_CPE_RealGrab_VGA((WORD)videoX, (WORD)videoY);
		bRealGrab = TRUE;
		bRealGrab = FALSE;
		W32_CPE_Exit_Grab_VGA( (WORD)videoX, (WORD)videoY );
       

    }

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -