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