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

📄 aiedlg.cpp

📁 又VC++实现的基于TWAIN的扫描仪图像输入处理软件
💻 CPP
📖 第 1 页 / 共 4 页
字号:
		palDIB = NULL;
	  }
	  oldPalette=dc.SelectPalette( palDIB, TRUE);
	  nColorsChanged=dc.RealizePalette();

	  lpDIB = (LPSTR) ::GlobalLock((HGLOBAL) hDIB);
	  cxDIB = (int) ::DIBWidth(lpDIB);         
	  cyDIB = (int) ::DIBHeight(lpDIB);        
	  ::GlobalUnlock((HGLOBAL) hDIB);
		
	  rcDIB.top = rcDIB.left = 0;
	  rcDIB.right = cxDIB;
	  rcDIB.bottom = cyDIB;

	  GetDlgItem(IDC_STATIC_ENHANCED)->GetClientRect(rcDest);
      GetDlgItem(IDC_STATIC_ENHANCED)->ClientToScreen(rcDest);
	  ScreenToClient(rcDest);
	  bDone=::PaintDIB(dc.m_hDC, &rcDest,(struct HDIB__ *)hDIB,
			&rcDIB, palDIB);
	  dc.SelectPalette(oldPalette,TRUE);
	}
}

//显示BCE对话框(关于明度对比度的窗口)
void CAIEDlg::OnShowBCE() 
{
  	if(m_bShowSHE)
	{
	  m_pSHEDlg->DestroyWindow();
	  delete m_pSHEDlg;
	  m_bShowSHE = FALSE;
	  m_pSHEDlg = NULL;
	 
	}
	if(m_bShowCE)
	{
	  m_pCEDlg->DestroyWindow();
	  delete m_pCEDlg;
	  m_bShowCE = FALSE;
	  m_pCEDlg = NULL;
    
	}
	if(m_pBCEDlg==NULL)
	{
	  m_bShowBCE = TRUE;
      be1=FALSE;
	  m_pBCEDlg = new CBCEDlg(this);
	  m_pBCEDlg->Create();
      be1=TRUE;
    
	}
	else
	{
	  m_pBCEDlg->SetActiveWindow();
	}

    HDIB hbmp1;
    CRect rect;
    char IniFile[120];
    GetWindowsDirectory(IniFile,sizeof(IniFile));
	char* pFileName0=lstrcat(IniFile,"\\twain_32\\MTIScanner\\preview0.bmp");

    hbmp1=::ReadDIBFile( pFileName0 );
    pScanner->SetHandleofPreviewBMP(hbmp1);
    hbmp1=::ReadDIBFile( pFileName0 );
	pScanner->SetHandleofAdjustedPreviewBMP(hbmp1); 

    GetDlgItem(IDC_STATIC_ORIGINAL)->GetClientRect(rect);
	GetDlgItem(IDC_STATIC_ORIGINAL)->ClientToScreen(rect);
    ScreenToClient(rect);
	InvalidateRect( &rect, TRUE );

    GetDlgItem(IDC_STATIC_ENHANCED)->GetClientRect(rect);
	GetDlgItem(IDC_STATIC_ENHANCED)->ClientToScreen(rect);
	ScreenToClient(rect);
	InvalidateRect( &rect, TRUE );
}

//调整图象明度的方法(明度滚动条的值减128再加到每个像点色度值上)
LONG CAIEDlg::AdjustPreBrightness()
{
	CRect rect;

	single=TRUE;
	//具体实现校正过程
    jiaose();
	//显示校正结果
    display();

    GetDlgItem(IDC_STATIC_ENHANCED)->GetClientRect(rect);
    GetDlgItem(IDC_STATIC_ENHANCED)->ClientToScreen(rect);
    ScreenToClient(rect);
    InvalidateRect( &rect, TRUE );
    return TRUE;
}

//调节预扫图像的对比度方法(即128+(像点的色度值-128)*(滚动条的数值/128.0))
LONG CAIEDlg::AdjustPreContrast()
{
	CRect rect;
    single=TRUE; 
    //具体校正过程
	jiaose();
    display();

	GetDlgItem(IDC_STATIC_ENHANCED)->GetClientRect(rect);
	GetDlgItem(IDC_STATIC_ENHANCED)->ClientToScreen(rect);
	ScreenToClient(rect);
	InvalidateRect( &rect, TRUE );
	return TRUE;
}

//显示调节预扫图象的高光和阴影的对话框
void CAIEDlg::OnShowSH() 
{
 
  if(m_bShowBCE)
  {
	m_pBCEDlg->DestroyWindow();
	delete m_pBCEDlg;
	m_bShowBCE = FALSE;
	m_pBCEDlg = NULL;
  }
  if(m_bShowCE)
  {
	m_pCEDlg->DestroyWindow();
	delete m_pCEDlg;
	m_bShowCE = FALSE;
	m_pCEDlg = NULL;
  }
  if(m_pSHEDlg==NULL)
  {
	m_bShowSHE = TRUE;
	m_pSHEDlg = new CSHE(this);
	m_pSHEDlg->Create();
  }
  else
  {
	m_pSHEDlg->SetActiveWindow();
  }
   
    HDIB hbmp1;
    CRect rect;

    char IniFile[120];
    GetWindowsDirectory(IniFile,sizeof(IniFile));
	char* pFileName0=lstrcat(IniFile,"\\twain_32\\MTIScanner\\preview0.bmp");

    hbmp1=::ReadDIBFile( pFileName0 );
    pScanner->SetHandleofPreviewBMP(hbmp1);
    hbmp1=::ReadDIBFile( pFileName0 );
	pScanner->SetHandleofAdjustedPreviewBMP(hbmp1); 

    GetDlgItem(IDC_STATIC_ORIGINAL)->GetClientRect(rect);
	GetDlgItem(IDC_STATIC_ORIGINAL)->ClientToScreen(rect);
    ScreenToClient(rect);
	InvalidateRect( &rect, TRUE );

    GetDlgItem(IDC_STATIC_ENHANCED)->GetClientRect(rect);
	GetDlgItem(IDC_STATIC_ENHANCED)->ClientToScreen(rect);
	ScreenToClient(rect);
	InvalidateRect( &rect, TRUE );
}

//调整阴影和高光的方法
LONG CAIEDlg::AdjustPreSH(int nOutShade,int nOutHighLight)
{
     
	CRect rect;

	single=TRUE;

    //具体校正过程
	jiaose();
    display();
  
	GetDlgItem(IDC_STATIC_ENHANCED)->GetClientRect(rect);
	GetDlgItem(IDC_STATIC_ENHANCED)->ClientToScreen(rect);
	ScreenToClient(rect);
	InvalidateRect( &rect, TRUE );
	return TRUE;
}

////////////////////////////////////////////////////////
//显示调节预扫图象GAMMA曲线的对话框
/////////////////////////////////////////////////////////
void CAIEDlg::OnShowCE() 
{
   if(m_bShowBCE)
  {
	m_pBCEDlg->DestroyWindow();
	delete m_pBCEDlg;
	m_bShowBCE = FALSE;
	m_pBCEDlg = NULL;
  }
  if(m_bShowSHE)
  {
	m_pSHEDlg->DestroyWindow();
	delete m_pSHEDlg;
	m_bShowSHE = FALSE;
	m_pSHEDlg = NULL;
  }
  if(m_pCEDlg==NULL)
  {
	m_bShowCE = TRUE;
	m_pCEDlg = new CCEDlg(this);
	m_pCEDlg->Create();
  }
  else
  {
	m_pCEDlg->SetActiveWindow();
  }
  
    HDIB hbmp1;
    CRect rect;

    char IniFile[120];
    GetWindowsDirectory(IniFile,sizeof(IniFile));
	char* pFileName0=lstrcat(IniFile,"\\twain_32\\MTIScanner\\preview0.bmp");

    hbmp1=::ReadDIBFile( pFileName0 );
    pScanner->SetHandleofPreviewBMP(hbmp1);
    hbmp1=::ReadDIBFile( pFileName0 );
	pScanner->SetHandleofAdjustedPreviewBMP(hbmp1); 

    GetDlgItem(IDC_STATIC_ORIGINAL)->GetClientRect(rect);
	GetDlgItem(IDC_STATIC_ORIGINAL)->ClientToScreen(rect);
    ScreenToClient(rect);
	InvalidateRect( &rect, TRUE );

    GetDlgItem(IDC_STATIC_ENHANCED)->GetClientRect(rect);
	GetDlgItem(IDC_STATIC_ENHANCED)->ClientToScreen(rect);
	ScreenToClient(rect);
	InvalidateRect( &rect, TRUE );

}

///////////////////////////////////////////////////////////////////
//利用GAMMA曲线或LINE线进行图象的调整
///////////////////////////////////////////////////////////////////
LONG CAIEDlg::AdjustPreIndex(int nIndex[256],int nChannel)
{
  	CRect rect;
	   
 	single=TRUE;
    int i;

   	for(i=0;i<256;i++)
	{
	  if(nChannel==0)
	  {
	   IndexCanR1[i]=nIndex[i];
	   IndexCanG1[i]=nIndex[i];
	   IndexCanB1[i]=nIndex[i];
	  }
      if(nChannel==1)
	  {
	   IndexCanR1[i]=nIndex[i];
	  }
      if(nChannel==2)
	  {
	    IndexCanG1[i]=nIndex[i];
	  }
      if(nChannel==3)
	  {
	   IndexCanB1[i]=nIndex[i];
	  }
	}

    //写GAMMA校正文件
    char IniFile[120]; 
    char buffer4[768];
	CFile * fp1 = new CFile;

	GetWindowsDirectory(IniFile,sizeof(IniFile));
    char* pFileName1=lstrcat(IniFile,"\\twain_32\\MTIScanner\\Gamma.txt");
   
	try
	{
	   fp1->Open( pFileName1, CFile::modeWrite|CFile::modeCreate);
	}
	catch( CFileException e )
	{
	    afxDump << "File could not be opened " << e.m_cause << "\n";
		return FALSE;
	}
    for(i=0;i<256;i++)
	{
      buffer4[i]=IndexCanR1[i];
	}
	for(i=0;i<256;i++)
	{
      buffer4[i+256]=IndexCanG1[i];
	}
    for(i=0;i<256;i++)
	{
      buffer4[i+512]=IndexCanB1[i];
	} 

	fp1->Write((unsigned char*)buffer4,768);
  	fp1->Close();
	//具体实现校正过程
    jiaose();
    display();

	GetDlgItem(IDC_STATIC_ENHANCED)->GetClientRect(rect);
	GetDlgItem(IDC_STATIC_ENHANCED)->ClientToScreen(rect);
	ScreenToClient(rect);
	InvalidateRect( &rect, TRUE );

	return TRUE;
}

////////////////////////////////////////////////////////////
//确认并传递参数
///////////////////////////////////////////////////////////
void CAIEDlg::OnOK() 
{
	HANDLE hDIB0 = pScanner->GetHandleofPreviewBMP();
	HANDLE hDIB1 = pScanner->GetHandleofAdjustedPreviewBMP();
	int i;
    char str[36];
    int nTemp;

    CFileException e;
    HDIB  hbmp1;
    
	LPSTR    lpDIBHdr;            
	LPSTR    lpDIBHdr1;
	LPSTR    lpDIB0Bits;           
	LPSTR    lpDIB1Bits;           
  	CRect    rect;
	LPSTR    lpStart;
    LPSTR    lpStart1;

	lpDIBHdr  = (LPSTR) ::GlobalLock((HGLOBAL) hDIB0);
	lpDIB0Bits = ::FindDIBBits(lpDIBHdr);
    lpStart=lpDIB0Bits;
    lpStart1=lpStart;

	lpDIBHdr1  = (LPSTR) ::GlobalLock((HGLOBAL) hDIB1);
	lpDIB1Bits = ::FindDIBBits(lpDIBHdr1);
 //////////////////////////////////////////
	/*
	for(i=0;i<256;i++)
		{
	      IndexCanR[i]=IndexCanR00[i];
	      IndexCanG[i]=IndexCanG00[i];
	      IndexCanB[i]=IndexCanB00[i];
		}*/
	
	memcpy(IndexCanR,IndexCanR00,256*sizeof(int));
	memcpy(IndexCanG,IndexCanG00,256*sizeof(int));	
	memcpy(IndexCanB,IndexCanB00,256*sizeof(int));

	int cxDIB = (int) ::DIBWidth(lpDIBHdr);       
	int cyDIB = (int) ::DIBHeight(lpDIBHdr);        
	int colornum=(int)::DIBNumColors(lpDIBHdr);
	int nBitCount;

    int bM,bR,bG,bB;
	int cM,cR,cG,cB;
	int hM,hR,hG,hB;
	int sM,sR,sG,sB;
    int lM,lR,lG,lB;
	int blackPosM,blackPosR,blackPosB,blackPosG;
    int whitePosM,whitePosR,whitePosB,whitePosG;
   
	if(single==TRUE)
    {
        single=FALSE;
        //向下层传送彩色校正参数
        bM=GetPrivateProfileInt("pbrightness2","brightM",128,InitDir2); 
        sprintf(str, "%d", bM);
        WritePrivateProfileString("pbrightnessX", "brightM", str, InitDir2);
 
	 	bR=GetPrivateProfileInt("pbrightness2","brightR",128,InitDir2); 
        sprintf(str, "%d", bR);
        WritePrivateProfileString("pbrightnessX", "brightR", str, InitDir2);


		bG=GetPrivateProfileInt("pbrightness2","brightG",128,InitDir2);
        sprintf(str, "%d", bG);
        WritePrivateProfileString("pbrightnessX", "brightG", str, InitDir2);

        bB=GetPrivateProfileInt("pbrightness2","brightB",128,InitDir2);
        sprintf(str, "%d", bB);
        WritePrivateProfileString("pbrightnessX", "brightB", str, InitDir2); 

        cM=GetPrivateProfileInt("pcontrast2","contrastM",128,InitDir2);
        sprintf(str, "%d", cM);
        WritePrivateProfileString("pcontrastX", "contrastM", str, InitDir2); 


        cR=GetPrivateProfileInt("pcontrast2","contrastR",128,InitDir2);
        sprintf(str, "%d", cR);
        WritePrivateProfileString("pcontrastX", "contrastR", str, InitDir2);  

        cG=GetPrivateProfileInt("pcontrast2","contrastG",128,InitDir2);
        sprintf(str, "%d", cG);
        WritePrivateProfileString("pcontrastX", "contrastG", str, InitDir2);

        cB=GetPrivateProfileInt("pcontrast2","contrastB",128,InitDir2);
        sprintf(str, "%d", cB);
        WritePrivateProfileString("pcontrastX", "contrastB", str, InitDir2);

        lM=GetPrivateProfileInt("plimit2","limitM",128,InitDir2); 
        sprintf(str, "%d", lM);
        WritePrivateProfileString("plimitX", "limitM", str, InitDir2);

        lR=GetPrivateProfileInt("plimit2","limitR",128,InitDir2); 
        sprintf(str, "%d", lR);
        WritePrivateProfileString("plimitX", "limitR", str, InitDir2);

        lG=GetPrivateProfileInt("plimit2","limitG",128,InitDir2);
        sprintf(str, "%d", lG);
        WritePrivateProfileString("plimitX", "limitG", str, InitDir2);

        lB=GetPrivateProfileInt("plimit2","limitB",128,InitDir2); 
        sprintf(str, "%d", lB);
        WritePrivateProfileString("plimitX", "limitB", str, InitDir2);
 
        sM=GetPrivateProfileInt("pShe","shadeM",0,InitDir2);
        sprintf(str, "%d", sM);
        WritePrivateProfileString("pSheX", "shadeM", str, InitDir2);
		
		sR=GetPrivateProfileInt("pShe","shadeR",0,InitDir2);
        sprintf(str, "%d", sR);
        WritePrivateProfileString("pSheX", "shadeR", str, InitDir2);

        sG=GetPrivateProfileInt("pShe","shadeG",0,InitDir2);
        sprintf(str, "%d", sG);
        WritePrivateProfileString("pSheX", "shadeG", str, InitDir2);

        sB=GetPrivateProfileInt("pShe","shadeB",0,InitDir2);
        sprintf(str, "%d", sB);
        WritePrivateProfileString("pSheX", "shadeB", str, InitDir2);

		hM=GetPrivateProfileInt("pShe","highM",255,InitDir2);
		sprintf(str, "%d", hM);
        WritePrivateProfileString("pSheX", "highM", str, InitDir2); 
		
		hR=GetPrivateProfileInt("pShe","highR",255,InitDir2);
		sprintf(str, "%d", hR);
        WritePrivateProfileString("pSheX", "highR", str, InitDir2); 

        hG=GetPrivateProfileInt("pShe","highG",255,InitDir2); 
		sprintf(str, "%d", hG);
        WritePrivateProfileString("pSheX", "highG", str, InitDir2);

        hB=GetPrivateProfileInt("pShe","highB",255,InitDir2);  
        sprintf(str, "%d", hB);
        WritePrivateProfileString("pSheX", "highB", str, InitDir2);

        blackPosM=GetPrivateProfileInt("pShe","blackPosM",0,InitDir2);  
        sprintf(str, "%d", blackPosM);
        WritePrivateProfileString("pSheX", "blackPosM", str, InitDir2); 
		
		blackPosR=GetPrivateProfileInt("pShe","blackPosR",0,InitDir2);  
        sprintf(str, "%d", blackPosR);
        WritePrivateProfileString("pSheX", "blackPosR", str, InitDir2); 
		
        blackPosG=GetPrivateProfileInt("pShe","blackPosG",0,InitDir2);
        sprintf(str, "%d", blackPosG);
        WritePrivateProfileString("pSheX", "blackPosG", str, InitDir2);   
		
        blackPosB=GetPrivateProfileInt("pShe","blackPosB",0,InitDir2);  

⌨️ 快捷键说明

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