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

📄 she.cpp

📁 又VC++实现的基于TWAIN的扫描仪图像输入处理软件
💻 CPP
📖 第 1 页 / 共 2 页
字号:
        SetDlgItemInt(IDC_NUMBER,m_nIndex[(point.x-rect.left)*256/(rect.right-rect.left)]); 
		SetDlgItemInt(IDC_PERCENT1,nTemp*100/nSum);
	}
	else
	{
       SetDlgItemInt(IDC_INPUT,0);
       SetDlgItemInt(IDC_NUMBER,0); 
	   SetDlgItemInt(IDC_PERCENT1,0);

	}
	CDialog::OnMouseMove(nFlags, point);
} 

void CSHE::OnLButtonUp(UINT nFlags, CPoint point) 
{
	char str[36];
  
	GetDlgItemText(IDC_CHANNEL,m_sChannel);

    if(m_bIsBlackTri||m_bIsGrayTri||m_bIsWhiteTri)
	{
        if(m_sChannel=="主通道")
		{
		   //写主通道的值
		   sprintf(str, "%d",m_nShade);
		   WritePrivateProfileString("pShe", "shadeM", str, InitDir2); 
           WritePrivateProfileString("pShe", "shadeR", str, InitDir2);
		   WritePrivateProfileString("pShe", "shadeG", str, InitDir2);
           WritePrivateProfileString("pShe", "shadeB", str, InitDir2);

           sprintf(str, "%d",m_nHighLight);
           WritePrivateProfileString("pShe", "highM", str, InitDir2); 
           WritePrivateProfileString("pShe", "highR", str, InitDir2); 
           WritePrivateProfileString("pShe", "highG", str, InitDir2); 
           WritePrivateProfileString("pShe", "highB", str, InitDir2); 
		   
           sprintf(str, "%d",m_nWhiteTriXPos);
           WritePrivateProfileString("pShe", "whitePosM", str, InitDir2); 
           WritePrivateProfileString("pShe", "whitePosR", str, InitDir2);
           WritePrivateProfileString("pShe", "whitePosG", str, InitDir2);
           WritePrivateProfileString("pShe", "whitePosB", str, InitDir2);  
           
		   sprintf(str, "%d",m_nBlackTriXPos);
		   WritePrivateProfileString("pShe", "blackPosM", str, InitDir2); 
           WritePrivateProfileString("pShe", "blackPosR", str, InitDir2);
           WritePrivateProfileString("pShe", "blackPosG", str, InitDir2);
           WritePrivateProfileString("pShe", "blackPosB", str, InitDir2);
           
		   ((CAIEDlg*)m_pParent)->AdjustPreSH(m_nOutShade,m_nOutHighLight);
		}
        if(m_sChannel=="红通道")
		{
		   sprintf(str, "%d",m_nShade);
		   WritePrivateProfileString("pShe", "shadeR", str, InitDir2); 
           		    
		   sprintf(str, "%d",m_nHighLight);
		   WritePrivateProfileString("pShe", "highR", str, InitDir2); 
          
		   sprintf(str, "%d",m_nWhiteTriXPos);
		   WritePrivateProfileString("pShe", "whitePosR", str, InitDir2); 
           
		   sprintf(str, "%d",m_nBlackTriXPos);
		   WritePrivateProfileString("pShe", "blackPosR", str, InitDir2); 

		   ((CAIEDlg*)m_pParent)->AdjustPreSH(m_nOutShade,m_nOutHighLight);
		}  
		if(m_sChannel=="绿通道")
		{
		   sprintf(str, "%d",m_nShade);
		   WritePrivateProfileString("pShe", "shadeG", str, InitDir2); 
           		    
		   sprintf(str, "%d",m_nHighLight);
		   WritePrivateProfileString("pShe", "highG", str, InitDir2); 
          
		   sprintf(str, "%d",m_nWhiteTriXPos);
		   WritePrivateProfileString("pShe", "whitePosG", str, InitDir2); 
           
		   sprintf(str, "%d",m_nBlackTriXPos);
		   WritePrivateProfileString("pShe", "blackPosG", str, InitDir2); 

		   ((CAIEDlg*)m_pParent)->AdjustPreSH(m_nOutShade,m_nOutHighLight);
		}
		if(m_sChannel=="蓝通道")
		{
		   sprintf(str, "%d",m_nShade);		   	
		   WritePrivateProfileString("pShe", "shadeB", str, InitDir2); 

           sprintf(str, "%d",m_nHighLight);
           WritePrivateProfileString("pShe", "highB", str, InitDir2); 

           sprintf(str, "%d",m_nWhiteTriXPos);
           WritePrivateProfileString("pShe", "whitePosB", str, InitDir2); 

           sprintf(str, "%d",m_nBlackTriXPos);  
           WritePrivateProfileString("pShe", "blackPosB", str, InitDir2); 

		  ((CAIEDlg*)m_pParent)->AdjustPreSH(m_nOutShade,m_nOutHighLight);
		}
	}	
	m_bIsBlackTri = FALSE;
	m_bIsGrayTri = FALSE;
	m_bIsWhiteTri = FALSE;

   	CDialog::OnLButtonUp(nFlags, point);
}

////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////
void CSHE::OnSelchangeChannel() 
{
    int i;
	HANDLE hDIB0;		
	LPSTR    lpDIBHdr;            // Pointer to BITMAPINFOHEADER
	LPSTR    lpDIBBits0;           // Pointer to original DIB bits
	
	CRect rect;
    CRect rect2;

	GetDlgItem(IDC_STATIC_HISTOGRAM)->GetClientRect(rect);
	GetDlgItem(IDC_STATIC_HISTOGRAM)->ClientToScreen(rect);
	ScreenToClient(rect);
 
    GetDlgItemText(IDC_CHANNEL,m_sChannel);

	int whiteM,blackM;
    int whiteR,blackR;
    int whiteG,blackG;
    int whiteB,blackB;

    whiteM=GetPrivateProfileInt("pShe","whitePosM",145,InitDir2);
    blackM= GetPrivateProfileInt("pShe","blackPosM",0,InitDir2);

    whiteR=GetPrivateProfileInt("pShe","whitePosR",145,InitDir2);
    blackR= GetPrivateProfileInt("pShe","blackPosR",0,InitDir2);

    whiteG=GetPrivateProfileInt("pShe","whitePosG",145,InitDir2);
    blackG= GetPrivateProfileInt("pShe","blackPosG",0,InitDir2);

    whiteB=GetPrivateProfileInt("pShe","whitePosB",145,InitDir2);
    blackB= GetPrivateProfileInt("pShe","blackPosB",0,InitDir2);  
   
    if(m_sChannel=="主通道")
	{
      m_nBlackTriXPos=blackM;
      m_nWhiteTriXPos=whiteM;
      m_nShade=GetPrivateProfileInt("pShe","shadeM",0,InitDir2);
	  m_nHighLight=GetPrivateProfileInt("pShe","highM",255,InitDir2);
	}
	
	if(m_sChannel=="红通道")
	{
      m_nBlackTriXPos=blackR;
      m_nWhiteTriXPos=whiteR;
      m_nShade=GetPrivateProfileInt("pShe","shadeR",0,InitDir2);
	  m_nHighLight=GetPrivateProfileInt("pShe","highR",255,InitDir2);
	}
    if(m_sChannel=="绿通道")
	{
      m_nBlackTriXPos=blackG;
      m_nWhiteTriXPos=whiteG;
      m_nShade=GetPrivateProfileInt("pShe","shadeG",0,InitDir2);
	  m_nHighLight=GetPrivateProfileInt("pShe","highG",0,InitDir2);
	}
    if(m_sChannel=="蓝通道")
	{
      m_nBlackTriXPos=blackB;
      m_nWhiteTriXPos=whiteB; 
      m_nShade=GetPrivateProfileInt("pShe","shadeB",0,InitDir2);
	  m_nHighLight=GetPrivateProfileInt("pShe","highB",0,InitDir2);
	}

    UpdateData(FALSE);
    rect2.top	= rect.bottom+2;
	rect2.left	= rect.left-13;
	rect2.bottom = rect.bottom+23;
	rect2.right	= rect.right+13;
	
	for(i=0;i<256;i++)
	    m_nIndex[i] = 0;
	    m_nMaxCount=1; 
   	
	hDIB0 = pScanner->GetHandleofPreviewBMP();	
	if (hDIB0 == NULL)
	{
   	  for(i=0;i<256;i++)
		m_nIndex[i] = 0;
	    m_nMaxCount = 1;
	}
	else
	{
       //hDIB0 = pScanner->GetHandleofPreviewBMP();
       lpDIBHdr  = (LPSTR) ::GlobalLock((HGLOBAL) hDIB0);
	   lpDIBBits0 = ::FindDIBBits(lpDIBHdr);

	   int cxDIB = (int) ::DIBWidth(lpDIBHdr);         // Size of DIB - x
	   int cyDIB = (int) ::DIBHeight(lpDIBHdr);        // Size of DIB - y
       int nTemp;

       if(pScanner->m_nColor==16777216)
		{
	      nBitCount=cxDIB*cyDIB*3;
          for(i=0;i<nBitCount;i++)
		  {
             if(m_sChannel=="主通道")
			 {
               nTemp=(int)(*(unsigned char*)(lpDIBBits0)*0.2+*(unsigned char*)(lpDIBBits0+1)*0.21+*(unsigned char*)(lpDIBBits0+2)*0.59);
			 }
			  if(m_sChannel=="红通道")
			 {
               nTemp=*(unsigned char*)(lpDIBBits0);
			 }
			 if(m_sChannel=="绿通道")
			 {
               nTemp=*(unsigned char*)(lpDIBBits0+1);
			 }
			 if(m_sChannel=="蓝通道")
			 {
               nTemp=*(unsigned char*)(lpDIBBits0+2);
			 }
		     if(nTemp>255)
			 {
		 	  nTemp=255;
			 }
		     if(nTemp<0)
			 {
			  nTemp=0;
			 }
		    m_nIndex[nTemp]=m_nIndex[nTemp]+1; 
     
            i++;
		    i++;
          lpDIBBits0++;
		  lpDIBBits0++;
          lpDIBBits0++;
		 }
		}//end if
       else
	   {
         nBitCount=cxDIB*cyDIB;
	     for(i=0;i<nBitCount;i++)
		 {
		  nTemp=*(unsigned char*)(lpDIBBits0);
		  if(nTemp>255)
		  {
			nTemp=255;
		  }
		  if(nTemp<0)
		  {
			nTemp=0;
		  }
		  m_nIndex[nTemp]=m_nIndex[nTemp]+1; 
     
		   lpDIBBits0++;
		 }
       }
       m_nMaxCount=1;
     
	 ::GlobalUnlock((HGLOBAL) hDIB0);
      
	 for(i=0;i<256;i++)
	 {
		if(m_nMaxCount<m_nIndex[i])
		m_nMaxCount = m_nIndex[i];
	 }
	}
   InvalidateRect( &rect2, TRUE );
   InvalidateRect( &rect, TRUE );
}

///////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////// 
void CSHE::quexiao1()
{
	CRect rect;
    CRect rect2;

	GetDlgItem(IDC_STATIC_HISTOGRAM)->GetClientRect(rect);
	GetDlgItem(IDC_STATIC_HISTOGRAM)->ClientToScreen(rect);
	ScreenToClient(rect);
  
    GetDlgItemText(IDC_CHANNEL,m_sChannel);

	int whiteM,blackM;
    int whiteR,blackR;
    int whiteG,blackG;
    int whiteB,blackB;

	int channel;

    whiteM=GetPrivateProfileInt("pSheX","whitePosM",145,InitDir2);
    blackM= GetPrivateProfileInt("pSheX","blackPosM",0,InitDir2);

    whiteR=GetPrivateProfileInt("pSheX","whitePosR",145,InitDir2);
    blackR= GetPrivateProfileInt("pSheX","blackkPosR",0,InitDir2);

    whiteG=GetPrivateProfileInt("pSheX","whitePosG",145,InitDir2);
    blackG= GetPrivateProfileInt("pSheX","blackPosG",0,InitDir2);

    whiteB=GetPrivateProfileInt("pSheX","whitePosB",145,InitDir2);
    blackB= GetPrivateProfileInt("pSheX","blackPosB",0,InitDir2);  
   
   pScanner->m_nColor=GetPrivateProfileInt("color num","color",16777216,InitDir2); 
   channel=GetPrivateProfileInt("xianzhen","channel",42,InitDir2);
   if(pScanner->m_nColor==16777216)
   {
     GetDlgItemText(IDC_CHANNEL,m_sChannel);
   }
   else
   {
      channel=GetPrivateProfileInt("xianzhen","channel",42,InitDir2);
      if(channel==44)//红色通道
	   {
          m_sChannel="红通道";
	   }
	   if(channel==42)//绿色通道
	   {
         m_sChannel="绿通道";
	   }
	   if(channel==41)//蓝色通道
	   {
        m_sChannel="蓝通道";
	   }
   }
    
    if(m_sChannel=="主通道")
	{
      m_nBlackTriXPos=blackM;
      m_nWhiteTriXPos=whiteM;
      m_nShade=GetPrivateProfileInt("pSheX","shadeM",0,InitDir2);
	  m_nHighLight=GetPrivateProfileInt("pSheX","highM",255,InitDir2);
	}
    if(m_sChannel=="红通道")
	{
      m_nBlackTriXPos=blackR;
      m_nWhiteTriXPos=whiteR;
      m_nShade=GetPrivateProfileInt("pSheX","shadeR",0,InitDir2);
	  m_nHighLight=GetPrivateProfileInt("pSheX","highR",255,InitDir2);
	}
    if(m_sChannel=="绿通道")
	{
      m_nBlackTriXPos=blackG;
      m_nWhiteTriXPos=whiteG;
      m_nShade=GetPrivateProfileInt("pSheX","shadeG",0,InitDir2);
	  m_nHighLight=GetPrivateProfileInt("pSheX","highG",0,InitDir2);
	}
    if(m_sChannel=="蓝通道")
	{
      m_nBlackTriXPos=blackB;
      m_nWhiteTriXPos=whiteB; 
      m_nShade=GetPrivateProfileInt("pSheX","shadeB",0,InitDir2);
	  m_nHighLight=GetPrivateProfileInt("pSheX","highB",0,InitDir2);
	}

    UpdateData(FALSE);
    rect2.top	= rect.bottom+5;
	rect2.left	= rect.left-10;
	rect2.bottom = rect.bottom+20;
	rect2.right	= rect.right+10;
	
   InvalidateRect( &rect2, TRUE );
}

⌨️ 快捷键说明

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