rawdevelopdlg.cpp

来自「canon 相机SDK,非常难得」· C++ 代码 · 共 1,977 行 · 第 1/4 页

CPP
1,977
字号
// RawDevelopDlg.cpp : implementation file
//


#include "stdafx.h"
#include "RawDevelop.h"
#include "RawDevelopDlg.h"
#include "Progress.h"
#include "ComSettingDlg.h"

#include "cdAPI.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

#define		GETERRORID( x )		(cdERROR_ERRORID_MASK&(x))


/* Prototype declaration */
cdError	FindDCIMdirectory(	cdHVolume	hVolume,
							cdHItem		*hpRetItem );
int		CheckGammaRange( int	iGammaPos );



/* A DCIM directory is searched. */
cdError	FindDCIMdirectory(	cdHVolume	hVolume,
							cdHItem		*hpRetItem )
{
	cdError			err;
	cdHItem			hItem;
	cdHEnum			hEnumItem;
	cdItemInfo		SItemInfo;
	
	
	*hpRetItem = NULL;
	
	/* The items in volume are enumerated. */
	err = CDEnumItemReset( hVolume, cdENUM_HAS_THUMBNAIL, &hEnumItem );
	if( GETERRORID(err) != cdOK )
	{
		return	err;
	}
	
	while( (err = CDEnumItemNext( hEnumItem, &hItem )) == cdOK )
	{
		/* The information on an item is acquired. */
		err = CDGetItemInfo( hItem, &SItemInfo );
		if( GETERRORID(err) != cdOK )
		{
			CDEnumItemRelease( hEnumItem );
			return	err;
		}
		
		/* It investigates whether it is a DCIM directory. */
		if( _stricmp( "DCIM", SItemInfo.Name ) == 0 )
		{
			CDEnumItemRelease( hEnumItem );
			*hpRetItem = hItem;
			return	cdOK;
		}
	}
	
	if( GETERRORID(err) != cdENUM_NA )
	{
		CDEnumItemRelease( hEnumItem );
		return	err;
	}
	
	/* Listing of an item is ended. */
	err = CDEnumItemRelease( hEnumItem );
	
	return	err;
}

/* The position value of gamma investigates in within the limits. */
int		CheckGammaRange( int	iGammaPos )
{
	
	if( iGammaPos<0)
	{
		return	0;
	}
	else if(iGammaPos>65535)
	{
		return	65535;
	}
	
	return	iGammaPos;
}


/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About

class CAboutDlg : public CDialog
{
public:
	CAboutDlg();

// Dialog Data
	//{{AFX_DATA(CAboutDlg)
	enum { IDD = IDD_ABOUTBOX };
	//}}AFX_DATA

	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CAboutDlg)
	protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
	//}}AFX_VIRTUAL

// Implementation
protected:
	//{{AFX_MSG(CAboutDlg)
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
	//{{AFX_DATA_INIT(CAboutDlg)
	//}}AFX_DATA_INIT
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CAboutDlg)
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
	//{{AFX_MSG_MAP(CAboutDlg)
		// No message handlers
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CRawDevelopDlg dialog

CRawDevelopDlg::CRawDevelopDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CRawDevelopDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CRawDevelopDlg)
	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CRawDevelopDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CRawDevelopDlg)
	DDX_Control(pDX, IDC_EDGEATCAPTURE, m_CEdgeAdcap);
	DDX_Control(pDX, IDC_FORMAT, m_CFormat);
	DDX_Control(pDX, IDC_GAMMATBL_Y3, m_CGammaTblY3);
	DDX_Control(pDX, IDC_GAMMATBL_Y2, m_CGammaTblY2);
	DDX_Control(pDX, IDC_GAMMATBL_Y1, m_CGammaTblY1);
	DDX_Control(pDX, IDC_WB_POSY, m_CWBPosY);
	DDX_Control(pDX, IDC_WB_POSX, m_CWBPosX);
	DDX_Control(pDX, IDC_HUE, m_CHue);
	DDX_Control(pDX, IDC_DEGITALGAIN, m_CDigitalGain);
	DDX_Control(pDX, IDC_COLORMATRIX, m_CColorMatrix);
	DDX_Control(pDX, IDC_GAMMATBL_Y0, m_CGammaTblY0);
	DDX_Control(pDX, IDC_GAMMATBL_X3, m_CGammaTblX3);
	DDX_Control(pDX, IDC_GAMMATBL_X2, m_CGammaTblX2);
	DDX_Control(pDX, IDC_GAMMATBL_X1, m_CGammaTblX1);
	DDX_Control(pDX, IDC_GAMMATBL_X0, m_CGammaTblX0);
	DDX_Control(pDX, IDC_GAMMASRC, m_CGammaSrc);
	DDX_Control(pDX, IDC_EDGELEVEL, m_CEdgeLevel);
	DDX_Control(pDX, IDC_EDGEFREQ, m_CEdgeFreq);
	DDX_Control(pDX, IDC_ENHANCE, m_CEnhance);
	DDX_Control(pDX, IDC_COLORDEPTH, m_CColorDepth);
	DDX_Control(pDX, IDC_CONTRAST, m_CContrast);
	DDX_Control(pDX, IDC_WB_BROWSE, m_CWBBrowse);
	DDX_Control(pDX, IDC_WB_LIGHTSRC, m_CWBLightSrc);
	DDX_Control(pDX, IDC_WB_KELVIN, m_CWBKelvin);
	DDX_Control(pDX, IDC_WB_COEFFICIENT, m_CWBCofficient);
	DDX_Control(pDX, IDC_COLORFILTER, m_CColorFilter);
	DDX_Control(pDX, IDC_LINEAR, m_CLinear);
	DDX_Control(pDX, IDC_DEVELOP, m_CDevelop);
	DDX_Control(pDX, IDC_DISCONNECT, m_CDisconnect);
	DDX_Control(pDX, IDC_FILE, m_CFile);
	DDX_Control(pDX, IDC_END, m_CEnd);
	DDX_Control(pDX, IDC_CONNECT, m_CConnect);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CRawDevelopDlg, CDialog)
	//{{AFX_MSG_MAP(CRawDevelopDlg)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_BN_CLICKED(IDC_CONNECT, OnConnect)
	ON_BN_CLICKED(IDC_END, OnEnd)
	ON_BN_CLICKED(IDC_DISCONNECT, OnDisconnect)
	ON_BN_CLICKED(IDC_DEVELOP, OnDevelop)
	ON_LBN_SELCHANGE(IDC_FILE, OnSelchangeFile)
	ON_CBN_SELCHANGE(IDC_GAMMASRC, OnSelchangeGammasrc)
	ON_CBN_SELCHANGE(IDC_WB_LIGHTSRC, OnSelchangeWbLightsrc)
	ON_BN_CLICKED(IDC_WB_BROWSE, OnWbBrowse)
	ON_CBN_SELCHANGE(IDC_FORMAT, OnSelchangeFormat)
	ON_WM_DESTROY()
	ON_CBN_SELCHANGE(IDC_EDGELEVEL, OnSelchangeEdgelevel)
	ON_BN_CLICKED(IDC_EDGEATCAPTURE, OnEdgeatcapture)
	ON_EN_KILLFOCUS(IDC_DEGITALGAIN, OnKillfocusDegitalgain)
	ON_EN_KILLFOCUS(IDC_WB_KELVIN, OnKillfocusWbKelvin)
	ON_EN_KILLFOCUS(IDC_GAMMATBL_X0, OnKillfocusGammatblX0)
	ON_EN_KILLFOCUS(IDC_GAMMATBL_X1, OnKillfocusGammatblX1)
	ON_EN_KILLFOCUS(IDC_GAMMATBL_X2, OnKillfocusGammatblX2)
	ON_EN_KILLFOCUS(IDC_GAMMATBL_X3, OnKillfocusGammatblX3)
	ON_EN_KILLFOCUS(IDC_GAMMATBL_Y0, OnKillfocusGammatblY0)
	ON_EN_KILLFOCUS(IDC_GAMMATBL_Y1, OnKillfocusGammatblY1)
	ON_EN_KILLFOCUS(IDC_GAMMATBL_Y2, OnKillfocusGammatblY2)
	ON_EN_KILLFOCUS(IDC_GAMMATBL_Y3, OnKillfocusGammatblY3)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// Call back function

cdUInt32	CRawDevelopDlg::CamCallBackFunc(	cdEventID		EventID,
												const cdVoid*	pData,
												cdUInt32		DataSize,
												cdContext		Context )
{
	WPARAM				wParam;
	CRawDevelopDlg		*CpThis;
	
	
	CpThis = (CRawDevelopDlg*)Context;
	
	/* A security level is checked. */
	switch( cdEVENT_SEVERITY(EventID) )
	{
		case cdEVENT_SEVERITY_SHUTDOWN:
			wParam = ((WPARAM)BN_CLICKED<<16)|(0xFFFF&IDC_DISCONNECT);
			CpThis->PostMessage( WM_COMMAND, wParam, NULL );
			break;
		case cdEVENT_SEVERITY_NONE:
		case cdEVENT_SEVERITY_WARNING:
			break;
	}
	
	return	cdOK;
}

/////////////////////////////////////////////////////////////////////////////
// CRawDevelopDlg Internal function

/* A setup of all development parameters is made impossible. */
void CRawDevelopDlg::DisableDevelopControl()
{
	m_CFormat.EnableWindow( FALSE );
	m_CLinear.EnableWindow( FALSE );
	
	m_CWBLightSrc.EnableWindow( FALSE );
	m_CWBPosX.EnableWindow( FALSE );
	m_CWBPosY.EnableWindow( FALSE );
	m_CWBKelvin.EnableWindow( FALSE );
	m_CWBCofficient.EnableWindow( FALSE );
	m_CWBBrowse.EnableWindow( FALSE );
	
	m_CGammaTblY3.EnableWindow( FALSE );
	m_CGammaTblY2.EnableWindow( FALSE );
	m_CGammaTblY1.EnableWindow( FALSE );
	m_CGammaTblY0.EnableWindow( FALSE );
	m_CGammaTblX3.EnableWindow( FALSE );
	m_CGammaTblX2.EnableWindow( FALSE );
	m_CGammaTblX1.EnableWindow( FALSE );
	m_CGammaTblX0.EnableWindow( FALSE );
	m_CGammaSrc.EnableWindow( FALSE );
	
	m_CHue.EnableWindow( FALSE );
	m_CDigitalGain.EnableWindow( FALSE );
	m_CColorMatrix.EnableWindow( FALSE );
	m_CEdgeAdcap.EnableWindow( FALSE );
	m_CEdgeLevel.EnableWindow( FALSE );
	m_CEdgeFreq.EnableWindow( FALSE );
	m_CEnhance.EnableWindow( FALSE );
	m_CColorDepth.EnableWindow( FALSE );
	m_CContrast.EnableWindow( FALSE );
	m_CColorFilter.EnableWindow( FALSE );
	
}

/* Control is initialized. */
void CRawDevelopDlg::InitDevelopControl()
{
	int		i;
	long	lStyle;
	cdDevEdgeLevel	EdgeLevelList[] = {	cdEDGE_LEVEL_0,
										cdEDGE_LEVEL_1,
										cdEDGE_LEVEL_2,
										cdEDGE_LEVEL_3,
										cdEDGE_LEVEL_4,
										cdEDGE_LEVEL_5 };
	cdDevEdgeFreq	EdgeFreqList[] = {	cdEDGE_FREQ_1,
										cdEDGE_FREQ_2,
										cdEDGE_FREQ_3,
										cdEDGE_FREQ_4,
										cdEDGE_FREQ_5 };
	cdDevGammaSrc	GammaSrcList[] = {	cdGAMMA_SRC_ATCAPTURE,
										cdGAMMA_SRC_MODIFIED_PARAM,
										cdGAMMA_SRC_SPECIFIED_PARAM };
	cdDevColorMatrix	ColormatrixList[] = {	cdCOLOR_MATRIX_ATCAPTURE,
												cdCOLOR_MATRIX_1,
												cdCOLOR_MATRIX_2,
												cdCOLOR_MATRIX_3,
												cdCOLOR_MATRIX_4,
												cdCOLOR_MATRIX_5 };
	
	/* A setting value is assigned to a combobox. */	
	for( i=0 ; i<6 ; i++ )
	{
		m_CEdgeLevel.SetItemData( i, EdgeLevelList[i] );
	}
	
	for( i=0 ; i<5 ; i++ )
	{
		m_CEdgeFreq.SetItemData( i, EdgeFreqList[i] );
	}
	
	for( i=0 ; i<3 ; i++ )
	{
		m_CGammaSrc.SetItemData( i, GammaSrcList[i] );
	}
	
	for( i=0 ; i<6 ; i++ )
	{
		m_CColorMatrix.SetItemData( i, ColormatrixList[i] );
	}
		
	/* It enables it to input only a number. */
	lStyle = GetWindowLong( m_CGammaTblX0.m_hWnd, GWL_STYLE );
	SetWindowLong( m_CGammaTblX0.m_hWnd, GWL_STYLE, lStyle|ES_NUMBER );
	m_CGammaTblX0.LimitText( 6 );
	lStyle = GetWindowLong( m_CGammaTblX1.m_hWnd, GWL_STYLE );
	SetWindowLong( m_CGammaTblX1.m_hWnd, GWL_STYLE, lStyle|ES_NUMBER );
	m_CGammaTblX1.LimitText( 6 );
	lStyle = GetWindowLong( m_CGammaTblX2.m_hWnd, GWL_STYLE );
	SetWindowLong( m_CGammaTblX2.m_hWnd, GWL_STYLE, lStyle|ES_NUMBER );
	m_CGammaTblX2.LimitText( 6 );
	lStyle = GetWindowLong( m_CGammaTblX3.m_hWnd, GWL_STYLE );
	SetWindowLong( m_CGammaTblX3.m_hWnd, GWL_STYLE, lStyle|ES_NUMBER );
	m_CGammaTblX3.LimitText( 6 );
	lStyle = GetWindowLong( m_CGammaTblY0.m_hWnd, GWL_STYLE );
	SetWindowLong( m_CGammaTblY0.m_hWnd, GWL_STYLE, lStyle|ES_NUMBER );
	m_CGammaTblY0.LimitText( 6 );
	lStyle = GetWindowLong( m_CGammaTblY1.m_hWnd, GWL_STYLE );
	SetWindowLong( m_CGammaTblY1.m_hWnd, GWL_STYLE, lStyle|ES_NUMBER );
	m_CGammaTblY1.LimitText( 6 );
	lStyle = GetWindowLong( m_CGammaTblY2.m_hWnd, GWL_STYLE );
	SetWindowLong( m_CGammaTblY2.m_hWnd, GWL_STYLE, lStyle|ES_NUMBER );
	m_CGammaTblY2.LimitText( 6 );
	lStyle = GetWindowLong( m_CGammaTblY3.m_hWnd, GWL_STYLE );
	SetWindowLong( m_CGammaTblY3.m_hWnd, GWL_STYLE, lStyle|ES_NUMBER );
	m_CGammaTblY3.LimitText( 6 );
	
	lStyle = GetWindowLong( m_CWBPosX.m_hWnd, GWL_STYLE );
	SetWindowLong( m_CWBPosX.m_hWnd, GWL_STYLE, lStyle|ES_NUMBER );
	m_CWBPosX.LimitText( 13 );
	lStyle = GetWindowLong( m_CWBPosY.m_hWnd, GWL_STYLE );
	SetWindowLong( m_CWBPosY.m_hWnd, GWL_STYLE, lStyle|ES_NUMBER );
	m_CWBPosY.LimitText( 13 );
	
	lStyle = GetWindowLong( m_CWBKelvin.m_hWnd, GWL_STYLE );
	SetWindowLong( m_CWBKelvin.m_hWnd, GWL_STYLE, lStyle|ES_NUMBER );
	m_CWBKelvin.LimitText( 5 );
	
	m_CDigitalGain.LimitText( 3 );
	
}

/* The state of the item for a development setup is changed the first stage. */
void CRawDevelopDlg::SetDefaultControlState( cdRawDevelopFaculty	DevFaculty )
{
	int		i;
	char	*cpWBStrLsit[] = {	"ATCAPTURE",
								"WB_BY_POS",
								"USE_COEFFICIENT",
								"AUTO",
								"DAY_LIGHT",
								"CLOUDY",
								"TUNGSTEN",
								"FLUORESCENT",
								"FLASH",
								"CUSTOM" };
	cdWBLightSrc	WBIDList[] = {	cdWB_ATCAPTURE,
									cdWB_BY_POS,
									cdWB_USE_COEFFICIENT,
									cdWB_AUTO,
									cdWB_DAY_LIGHT,
									cdWB_CLOUDY,
									cdWB_TUNGSTEN,
									cdWB_FLUORESCENT,
									cdWB_FLASH,
									cdWB_CUSTOM };
	
	/* A setup of all development parameters is made impossible. */	
	DisableDevelopControl();

	/* Preservation form is set up. */
	m_CFormat.EnableWindow( TRUE );
	m_CFormat.ResetContent();
	if( DevFaculty&cdDEV_FORMAT_16_BIT )
	{
		m_CFormat.InsertString( 0, "JPEG" );
		m_CFormat.SetItemData( 0, cdFORMAT_JPEG_DCF );
		m_CFormat.InsertString( 1, "TIFF" );
		m_CFormat.SetItemData( 1, cdFORMAT_TIFF_DCF );
		m_CFormat.InsertString( 2, "TIFF(16Bits)" );
		m_CFormat.SetItemData( 2, cdFORMAT_TIFF_16 );
		m_CFormat.InsertString( 3, "PIXMAP" );
		m_CFormat.SetItemData( 3, cdFORMAT_PIXMAP );
		m_CFormat.InsertString( 4, "PIXMAP(16Bits)" );
		m_CFormat.SetItemData( 4, cdFORMAT_PIXMAP_16 );
	}
	else
	{
		m_CFormat.InsertString( 0, "JPEG" );
		m_CFormat.SetItemData( 0, cdFORMAT_JPEG_DCF );
		m_CFormat.InsertString( 1, "TIFF" );
		m_CFormat.SetItemData( 1, cdFORMAT_TIFF_DCF );
		m_CFormat.InsertString( 2, "PIXMAP" );
		m_CFormat.SetItemData( 2, cdFORMAT_PIXMAP );
	}

	/* Contrast, ColorDepth, Enhance and Hue is set up. */
	m_CContrast.ResetContent();
	m_CColorDepth.ResetContent();
	m_CEnhance.ResetContent();
	m_CHue.ResetContent();
	if( DevFaculty&cdDEV_TYPE_RANGE_1 )
	{
		/* Contrast is set up. */
		m_CContrast.InsertString( 0, "ATCAPTURE" );
		m_CContrast.SetItemData( 0, cdCONTRAST_ATCAPTURE );
		m_CContrast.InsertString( 1, "-1" );
		m_CContrast.SetItemData( 1, cdCONTRAST_WEAK );
		m_CContrast.InsertString( 2, "STANDARD" );
		m_CContrast.SetItemData( 2, cdCONTRAST_STANDARD );
		m_CContrast.InsertString( 3, "+1" );
		m_CContrast.SetItemData( 3, cdCONTRAST_STRONG );
		
		/* ColorDepth is set up. */
		m_CColorDepth.InsertString( 0, "ATCAPTURE" );
		m_CColorDepth.SetItemData( 0, cdCOLOR_DEPTH_ATCAPTURE );
		m_CColorDepth.InsertString( 1, "-1" );
		m_CColorDepth.SetItemData( 1, cdCOLOR_DEPTH_LIGHT );
		m_CColorDepth.InsertString( 2, "STANDARD" );
		m_CColorDepth.SetItemData( 2, cdCOLOR_DEPTH_STANDARD );
		m_CColorDepth.InsertString( 3, "+1" );
		m_CColorDepth.SetItemData( 3, cdCOLOR_DEPTH_DEEP );

		/* Enhance is set up. */
		m_CEnhance.InsertString( 0, "ATCAPTURE" );
		m_CEnhance.SetItemData( 0, cdENHANCE_ATCAPTURE );
		m_CEnhance.InsertString( 1, "-1" );
		m_CEnhance.SetItemData( 1, cdENHANCE_WEAK );
		m_CEnhance.InsertString( 2, "STANDARD" );
		m_CEnhance.SetItemData( 2, cdENHANCE_STANDARD );
		m_CEnhance.InsertString( 3, "+1" );
		m_CEnhance.SetItemData( 3, cdENHANCE_STRONG );
		
		/* Hue is set up. */
		m_CHue.InsertString( 0, "ATCAPTURE" );
		m_CHue.SetItemData( 0, cdHUE_ATCAPTURE );
		m_CHue.InsertString( 1, "-1" );
		m_CHue.SetItemData( 1, cdHUE_M_1 );
		m_CHue.InsertString( 2, "STANDARD" );
		m_CHue.SetItemData( 2, cdHUE_STANDARD );
		m_CHue.InsertString( 3, "+1" );
		m_CHue.SetItemData( 3, cdHUE_P_1 );

	}
	else if( DevFaculty&cdDEV_RANGE_2 )
	{
		/* Contrast is set up. */
		m_CContrast.InsertString( 0, "ATCAPTURE" );
		m_CContrast.SetItemData( 0, cdCONTRAST_ATCAPTURE );
		m_CContrast.InsertString( 1, "-2" );
		m_CContrast.SetItemData( 1, cdCONTRAST_WEAK_2 );
		m_CContrast.InsertString( 2, "-1" );
		m_CContrast.SetItemData( 2, cdCONTRAST_WEAK );
		m_CContrast.InsertString( 3, "STANDARD" );
		m_CContrast.SetItemData( 3, cdCONTRAST_STANDARD );
		m_CContrast.InsertString( 4, "+1" );
		m_CContrast.SetItemData( 4, cdCONTRAST_STRONG );
		m_CContrast.InsertString( 5, "+2" );
		m_CContrast.SetItemData( 5, cdCONTRAST_STRONG_2 );

⌨️ 快捷键说明

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