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 + -
显示快捷键?