rawdevelopdlg.cpp
来自「canon 相机SDK,非常难得」· C++ 代码 · 共 1,977 行 · 第 1/4 页
CPP
1,977 行
/* ColorDepth is set up. */
m_CColorDepth.InsertString( 0, "ATCAPTURE" );
m_CColorDepth.SetItemData( 0, cdCOLOR_DEPTH_ATCAPTURE );
m_CColorDepth.InsertString( 1, "-2" );
m_CColorDepth.SetItemData( 1, cdCOLOR_DEPTH_LIGHT_2 );
m_CColorDepth.InsertString( 2, "-1" );
m_CColorDepth.SetItemData( 2, cdCOLOR_DEPTH_LIGHT );
m_CColorDepth.InsertString( 3, "STANDARD" );
m_CColorDepth.SetItemData( 3, cdCOLOR_DEPTH_STANDARD );
m_CColorDepth.InsertString( 4, "+1" );
m_CColorDepth.SetItemData( 4, cdCOLOR_DEPTH_DEEP );
m_CColorDepth.InsertString( 5, "+2" );
m_CColorDepth.SetItemData( 5, cdCOLOR_DEPTH_DEEP_2 );
/* Enhance is set up. */
m_CEnhance.InsertString( 0, "ATCAPTURE" );
m_CEnhance.SetItemData( 0, cdENHANCE_ATCAPTURE );
m_CEnhance.InsertString( 1, "-2" );
m_CEnhance.SetItemData( 1, cdENHANCE_WEAK_2 );
m_CEnhance.InsertString( 2, "-1" );
m_CEnhance.SetItemData( 2, cdENHANCE_WEAK );
m_CEnhance.InsertString( 3, "STANDARD" );
m_CEnhance.SetItemData( 3, cdENHANCE_STANDARD );
m_CEnhance.InsertString( 4, "+1" );
m_CEnhance.SetItemData( 4, cdENHANCE_STRONG );
m_CEnhance.InsertString( 5, "+2" );
m_CEnhance.SetItemData( 5, cdENHANCE_STRONG_2 );
/* Hue is set up. */
m_CHue.InsertString( 0, "ATCAPTURE" );
m_CHue.SetItemData( 0, cdHUE_ATCAPTURE );
m_CHue.InsertString( 1, "-2" );
m_CHue.SetItemData( 1, cdHUE_M_2 );
m_CHue.InsertString( 2, "-1" );
m_CHue.SetItemData( 2, cdHUE_M_1 );
m_CHue.InsertString( 3, "STANDARD" );
m_CHue.SetItemData( 3, cdHUE_STANDARD );
m_CHue.InsertString( 4, "+1" );
m_CHue.SetItemData( 4, cdHUE_P_1 );
m_CHue.InsertString( 5, "+2" );
m_CHue.SetItemData( 5, cdHUE_P_2 );
}
/* WhiteBalance is set up. */
m_CWBLightSrc.ResetContent();
m_CWBLightSrc.EnableWindow( TRUE );
for( i=0 ; i<10 ; i++ )
{
m_CWBLightSrc.InsertString( i, cpWBStrLsit[i] );
m_CWBLightSrc.SetItemData( i, WBIDList[i] );
}
if( DevFaculty&cdDEV_RANGE_WB_1 )
{
m_CWBLightSrc.InsertString( i, "FLUORESCENT_H" );
m_CWBLightSrc.SetItemData( i, cdWB_FLUORESCENT_H );
i++;
}
if( DevFaculty&cdDEV_RANGE_WB_2 || DevFaculty&cdDEV_TYPE_B )
{
m_CWBLightSrc.InsertString( i, "KELVIN" );
m_CWBLightSrc.SetItemData( i, cdWB_KELVIN );
i++;
}
if( DevFaculty&cdDEV_RANGE_WB_3 || DevFaculty&cdDEV_TYPE_B )
{
m_CWBLightSrc.InsertString( i, "SHADE" );
m_CWBLightSrc.SetItemData( i, cdWB_SHADE );
i++;
}
/* A setup according to kind of RAW picture is performed. */
switch( DevFaculty&0x000000F0 )
{
case cdDEV_TYPE_A:
/* ColorFilter is set up. */
if( DevFaculty&cdDEV_FALSE_COLOR_FILTER )
{
m_CColorFilter.EnableWindow( TRUE );
}
/* Contrast, ColorDepth and Enhance is set up. */
if( DevFaculty&cdDEV_RANGE_1 || DevFaculty&cdDEV_RANGE_2 )
{
m_CContrast.EnableWindow( TRUE );
m_CColorDepth.EnableWindow( TRUE );
m_CEnhance.EnableWindow( TRUE );
}
break;
case cdDEV_TYPE_B:
/* ColorFilter is set up. */
m_CColorFilter.EnableWindow( TRUE );
/* Edge is set up. */
m_CEdgeAdcap.EnableWindow( TRUE );
/* Gamma is set up. */
m_CGammaSrc.EnableWindow( TRUE );
/* ColorMatrix is set up. */
m_CColorMatrix.EnableWindow( TRUE );
/* DigitalGain is set up. */
m_CDigitalGain.EnableWindow( TRUE );
break;
case cdDEV_TYPE_C:
/* ColorFilter is set up. */
if( DevFaculty&cdDEV_FALSE_COLOR_FILTER )
{
m_CColorFilter.EnableWindow( TRUE );
}
/* Contrast, ColorDepth and Enhance is set up. */
if( DevFaculty&cdDEV_RANGE_1 || DevFaculty&cdDEV_RANGE_2 )
{
m_CContrast.EnableWindow( TRUE );
m_CColorDepth.EnableWindow( TRUE );
m_CEnhance.EnableWindow( TRUE );
}
/* DigitalGain is set up. */
m_CDigitalGain.EnableWindow( TRUE );
/* Hue is set up. */
m_CHue.EnableWindow( TRUE );
break;
}
}
/* The value of the item for a development setup is changed the first stage. */
void CRawDevelopDlg::SetDefaultControlValue( void )
{
/* Preservation form is set up. */
m_CFormat.SetCurSel( 0 );
/* Linear is set up. */
m_CLinear.SetCheck( 0 );
/* ColorFilter is set up. */
m_CColorFilter.SetCheck( 1 );
/* Contrast is set up. */
m_CContrast.SetCurSel( 0 );
/* ColorDepth is set up. */
m_CColorDepth.SetCurSel( 0 );
/* Enhance is set up. */
m_CEnhance.SetCurSel( 0 );
/* Edge is set up. */
m_CEdgeAdcap.SetCheck( 1 );
m_CEdgeLevel.SetCurSel( 0 );
m_CEdgeFreq.SetCurSel( 0 );
/* Gamma is set up. */
m_CGammaSrc.SetCurSel( 0 );
m_CGammaTblX0.SetWindowText( "16383" );
m_CGammaTblY0.SetWindowText( "16383" );
m_CGammaTblX1.SetWindowText( "32767" );
m_CGammaTblY1.SetWindowText( "32767" );
m_CGammaTblX2.SetWindowText( "49151" );
m_CGammaTblY2.SetWindowText( "49151" );
m_CGammaTblX3.SetWindowText( "65535" );
m_CGammaTblY3.SetWindowText( "65535" );
/* ColorMatrix is set up. */
m_CColorMatrix.SetCurSel( 0 );
/* Hue is set up. */
m_CHue.SetCurSel( 0 );
/* DigitalGain is set up. */
m_CDigitalGain.SetWindowText( "0" );
/* WhiteBalance is set up. */
m_CWBLightSrc.SetCurSel( 0 );
m_CWBPosX.SetWindowText( "0" );
m_CWBPosY.SetWindowText( "0" );
m_CWBKelvin.SetWindowText( "2800" );
m_CWBCofficient.SetWindowText( "" );
}
/* Control is set up according to the kind of RAW file. */
void CRawDevelopDlg::SetDevCtrlState( cdRawDevelopFaculty DevFaculty )
{
SetDefaultControlState( DevFaculty );
SetDefaultControlValue();
}
/* A development setup is performed. */
BOOL CRawDevelopDlg::SetDevelopParam( cdHImageData hImgData,
cdRawDevelopFaculty DevFaculty,
cdError *pErr )
{
*pErr = cdOK;
/* A Linear setup is performed. */
if( m_CLinear.GetCheck() )
{
*pErr = CDSetDevParam_Linear( hImgData, TRUE );
if( GETERRORID( *pErr ) != cdOK )
{
return FALSE;
}
}
/* A WhiteBalance setup is performed. */
cdWBLightSrc LightSrc;
cdUInt32 ParamSize,Kelvin;
void *pParam;
cdPosition WBPos;
char szText[256];
cdStgMedium MyMedium;
char szCoefficientPath[MAX_PATH];
HANDLE hFile;
LightSrc = (cdWBLightSrc)m_CWBLightSrc.GetItemData( m_CWBLightSrc.GetCurSel() );
switch( LightSrc )
{
case cdWB_BY_POS:
m_CWBPosX.GetWindowText( szText, 256 );
WBPos.X = atoi( szText );
m_CWBPosY.GetWindowText( szText, 256 );
WBPos.Y = atoi( szText );
pParam = &WBPos;
ParamSize = sizeof(cdPosition);
break;
case cdWB_USE_COEFFICIENT:
m_CWBCofficient.GetWindowText( szCoefficientPath, MAX_PATH );
MyMedium.Type = cdMEMTYPE_FILE;
MyMedium.u.lpszFileName = szCoefficientPath;
pParam = &MyMedium;
/* The size of a parameter is acquired. */
hFile = CreateFile( szCoefficientPath,
GENERIC_READ,
FILE_SHARE_READ,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL );
if( hFile == INVALID_HANDLE_VALUE )
{
*pErr = cdOK;
return FALSE;
}
ParamSize = GetFileSize( hFile, NULL );
if( (ParamSize==0xFFFFFFFF) && (GetLastError()!=NO_ERROR) )
{
CloseHandle( hFile );
*pErr = cdOK;
return FALSE;
}
CloseHandle( hFile );
break;
case cdWB_KELVIN:
m_CWBKelvin.GetWindowText( szText, 256 );
Kelvin = atoi(szText);
/* It corrects to the multiple of 100. */
Kelvin = (Kelvin/100)*100;
pParam = &Kelvin;
ParamSize = sizeof(cdUInt32);
break;
default:
ParamSize = 0;
pParam = NULL;
break;
}
*pErr = CDSetDevParam_WB( hImgData, LightSrc, ParamSize, pParam );
if( GETERRORID( *pErr ) != cdOK )
{
return FALSE;
}
cdDevContrast Contrast;
cdDevColorDepth ColorDepth;
cdDevEnhance Enhance;
cdDevEdgeLevel EdgeLevel;
cdDevEdgeFreq EdgeFrequency;
cdDevGammaSrc GammaSrc;
cdDevGammaLUTMatching *pGammaLUT=NULL;
cdDevGammaLUTMatching GammaLUT;
cdDevColorMatrix ColorMatrix;
cdInt16 DigitalGain;
cdDevHue Hue;
switch( DevFaculty&0x000000F0 )
{
case cdDEV_TYPE_A:
if( DevFaculty&cdDEV_FALSE_COLOR_FILTER )
{
/* A ColorFilter setup is performed. */
if( m_CColorFilter.GetCheck() == 0 )
{
*pErr = CDSetDevParam_FalseColorFilter( hImgData, FALSE );
if( GETERRORID( *pErr ) != cdOK )
{
return FALSE;
}
}
}
if( DevFaculty&cdDEV_RANGE_1 || DevFaculty&cdDEV_RANGE_2 )
{
/* A Contrast setup is performed. */
Contrast = (cdDevContrast)m_CContrast.GetItemData( m_CContrast.GetCurSel() );
*pErr = CDSetDevParam_Contrast( hImgData, Contrast );
if( GETERRORID( *pErr ) != cdOK )
{
return FALSE;
}
/* A ColorDepth setup is performed. */
ColorDepth = (cdDevColorDepth)m_CColorDepth.GetItemData( m_CColorDepth.GetCurSel() );
*pErr = CDSetDevParam_ColorDepth( hImgData, ColorDepth );
if( GETERRORID( *pErr ) != cdOK )
{
return FALSE;
}
/* An Enhance setup is performed. */
Enhance = (cdDevEnhance)m_CEnhance.GetItemData( m_CEnhance.GetCurSel() );
*pErr = CDSetDevParam_Enhance( hImgData, Enhance );
if( GETERRORID( *pErr ) != cdOK )
{
return FALSE;
}
}
break;
case cdDEV_TYPE_B:
/* A ColorFilter setup is performed. */
if( m_CColorFilter.GetCheck() == 0 )
{
*pErr = CDSetDevParam_FalseColorFilter( hImgData, FALSE );
if( GETERRORID( *pErr ) != cdOK )
{
return FALSE;
}
}
/* An Enhance setup is performed. */
if( m_CEdgeAdcap.GetCheck() )
{
EdgeLevel = cdEDGE_LEVEL_ATCAPTURE;
EdgeFrequency = cdEDGE_FREQ_ATCAPTURE;
}
else
{
EdgeLevel = (cdDevEdgeLevel)m_CEdgeLevel.GetItemData( m_CEdgeLevel.GetCurSel() );
EdgeFrequency = (cdDevEdgeFreq)m_CEdgeFreq.GetItemData( m_CEdgeFreq.GetCurSel() );
}
*pErr = CDSetDevParam_Edge( hImgData, EdgeLevel, EdgeFrequency );
if( GETERRORID( *pErr ) != cdOK )
{
return FALSE;
}
/* A Gamma setup is performed. */
GammaSrc = (cdDevGammaSrc)m_CGammaSrc.GetItemData( m_CGammaSrc.GetCurSel() );
if( GammaSrc == cdGAMMA_SRC_SPECIFIED_PARAM )
{
memset( &GammaLUT, 0, sizeof(cdDevGammaLUTMatching) );
m_CGammaTblX0.GetWindowText( szText, 256 );
GammaLUT.Right.r.p0.x = atoi(szText);
GammaLUT.Right.g.p0.x = atoi(szText);
GammaLUT.Right.b.p0.x = atoi(szText);
m_CGammaTblY0.GetWindowText( szText, 256 );
GammaLUT.Right.r.p0.y = atoi(szText);
GammaLUT.Right.g.p0.y = atoi(szText);
GammaLUT.Right.b.p0.y = atoi(szText);
m_CGammaTblX1.GetWindowText( szText, 256 );
GammaLUT.Right.r.p1.x = atoi(szText);
GammaLUT.Right.g.p1.x = atoi(szText);
GammaLUT.Right.b.p1.x = atoi(szText);
m_CGammaTblY1.GetWindowText( szText, 256 );
GammaLUT.Right.r.p1.y = atoi(szText);
GammaLUT.Right.g.p1.y = atoi(szText);
GammaLUT.Right.b.p1.y = atoi(szText);
m_CGammaTblX2.GetWindowText( szText, 256 );
GammaLUT.Right.r.p2.x = atoi(szText);
GammaLUT.Right.g.p2.x = atoi(szText);
GammaLUT.Right.b.p2.x = atoi(szText);
m_CGammaTblY2.GetWindowText( szText, 256 );
GammaLUT.Right.r.p2.y = atoi(szText);
GammaLUT.Right.g.p2.y = atoi(szText);
GammaLUT.Right.b.p2.y = atoi(szText);
m_CGammaTblX3.GetWindowText( szText, 256 );
GammaLUT.Right.r.p3.x = atoi(szText);
GammaLUT.Right.g.p3.x = atoi(szText);
GammaLUT.Right.b.p3.x = atoi(szText);
m_CGammaTblY3.GetWindowText( szText, 256 );
GammaLUT.Right.r.p3.y = atoi(szText);
GammaLUT.Right.g.p3.y = atoi(szText);
GammaLUT.Right.b.p3.y = atoi(szText);
pGammaLUT = &GammaLUT;
}
*pErr = CDSetDevParam_Gamma( hImgData, GammaSrc, pGammaLUT );
if( GETERRORID( *pErr ) != cdOK )
{
return FALSE;
}
/* A ColorMatrix setup is performed. */
ColorMatrix = (cdDevColorMatrix)m_CColorMatrix.GetItemData( m_CColorMatrix.GetCurSel() );
*pErr = CDSetDevParam_ColorMatrix( hImgData, ColorMatrix );
if( GETERRORID( *pErr ) != cdOK )
{
return FALSE;
}
/* A DigitalGain setup is performed. */
m_CDigitalGain.GetWindowText( szText, 256 );
DigitalGain = (cdInt16)atoi( szText );
*pErr = CDSetDevParam_DigitalGain( hImgData, DigitalGain );
if( GETERRORID( *pErr ) != cdOK )
{
return FALSE;
}
break;
case cdDEV_TYPE_C:
if( DevFaculty&cdDEV_FALSE_COLOR_FILTER )
{
/* A ColorFilter setup is performed. */
if( m_CColorFilter.GetCheck() == 0 )
{
*pErr = CDSetDevParam_FalseColorFilter( hImgData, FALSE );
if( GETERRORID( *pErr ) != cdOK )
{
return FALSE;
}
}
}
if( DevFaculty&cdDEV_RANGE_1 || DevFaculty&cdDEV_RANGE_2 )
{
/* A Contrast setup is performed. */
Contrast = (cdDevContrast)m_CContrast.GetItemData( m_CContrast.GetCurSel() );
*pErr = CDSetDevParam_Contrast( hImgData, Contrast );
if( GETERRORID( *pErr ) != cdOK )
{
return FALSE;
}
/* A ColorDepth setup is performed. */
ColorDepth = (cdDevColorDepth)m_CColorDepth.GetItemData( m_CColorDepth.GetCurSel() );
*pErr = CDSetDevParam_ColorDepth( hImgData, ColorDepth );
if( GETERRORID( *pErr ) != cdOK )
{
return FALSE;
}
/* An Enhance setup is performed. */
Enhance = (cdDevEnhance)m_CEnhance.GetItemData( m_CEnhance.GetCurSel() );
*pErr = CDSetDevParam_Enhance( hImgData, Enhance );
if( GETERRORID( *pErr ) != cdOK )
{
return FALSE;
}
}
/* A DigitalGain setup is performed. */
m_CDigitalGain.GetWindowText( szText, 256 );
DigitalGain = (cdInt16)atoi( szText );
*pErr = CDSetDevParam_DigitalGain( hImgData, DigitalGain );
if( GETERRORID( *pErr ) != cdOK )
{
return FALSE;
}
/* A Hue setup is performed. */
Hue = (cdDevHue)m_CHue.GetItemData( m_CHue.GetCurSel() );
*pErr = CDSetDevParam_Hue( hImgData, Hue );
if( GETERRORID( *pErr ) != cdOK )
{
return FALSE;
}
break;
}
return TRUE;
}
/////////////////////////////////////////////////////////////////////////////
// CRawDevelopDlg message handlers
BOOL CRawDevelopDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// Add "About..." menu item to system menu.
// IDM_ABOUTBOX must be in the system command range.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?