📄 aiedlg.cpp
字号:
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 + -