285 lines
9.6 KiB
C++
285 lines
9.6 KiB
C++
// ResampleImageDlg.cpp : implementation file
|
|
//
|
|
|
|
#include "stdafx.h"
|
|
#include "dibmanager.h"
|
|
#include "ResampleImageDlg.h"
|
|
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CResampleImageDlg dialog
|
|
|
|
|
|
CResampleImageDlg::CResampleImageDlg(CWnd* pParent /*=NULL*/)
|
|
: CDialog(CResampleImageDlg::IDD, pParent)
|
|
{
|
|
//{{AFX_DATA_INIT(CResampleImageDlg)
|
|
m_bMaintainRatio = FALSE;
|
|
m_bMatchZoomLevel = FALSE;
|
|
m_sHeightOrig = _T("");
|
|
m_sWidthOrig = _T("");
|
|
m_nWidthPercents = 0;
|
|
m_nWidthPixels = 0;
|
|
m_nHeightPercents = 0;
|
|
m_nHeightPixels = 0;
|
|
m_bConvertTo = FALSE;
|
|
m_nConvertTo = -1;
|
|
//}}AFX_DATA_INIT
|
|
m_nCurrentZoomLevel=0;
|
|
m_bCanConvert=FALSE;
|
|
m_bCanResize=FALSE;
|
|
m_nOrigHeight=0;
|
|
m_nOrigWidth=0;
|
|
}
|
|
|
|
|
|
void CResampleImageDlg::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CDialog::DoDataExchange(pDX);
|
|
//{{AFX_DATA_MAP(CResampleImageDlg)
|
|
DDX_Control(pDX, IDC_CHECK_MATCH_ZOOM_LEVEL, m_ctlCheckMatchZoomLevel);
|
|
DDX_Control(pDX, IDC_CHECK_CONVERT_TO, m_ctlCheckConvertTo);
|
|
DDX_Control(pDX, IDC_WIDTH_PIXELS, m_ctlEditWidthPixels);
|
|
DDX_Control(pDX, IDC_WIDTH_PERCENTS, m_ctlEditWidthPercents);
|
|
DDX_Control(pDX, IDC_SPIN_WIDTH_PIXELS, m_ctlSpinWidthPixels);
|
|
DDX_Control(pDX, IDC_SPIN_WIDTH_PERCENTS, m_ctlSpinWidthPercents);
|
|
DDX_Control(pDX, IDC_SPIN_HEIGHT_PIXELS, m_ctlSpinHeightPixels);
|
|
DDX_Control(pDX, IDC_SPIN_HEIGHT_PERCENTS, m_ctlSpinHeightPercents);
|
|
DDX_Control(pDX, IDC_HEIGHT_PIXELS, m_ctlEditHeightPixels);
|
|
DDX_Control(pDX, IDC_HEIGHT_PERCENTS, m_ctlEditHeightPercents);
|
|
DDX_Control(pDX, IDC_COMBO_CONVERT_TO, m_ctlComboConvertTo);
|
|
DDX_Control(pDX, IDC_CHECK_MAINTAIN_RATIO, m_ctlCheckMaintainRatio);
|
|
DDX_Check(pDX, IDC_CHECK_MAINTAIN_RATIO, m_bMaintainRatio);
|
|
DDX_Check(pDX, IDC_CHECK_MATCH_ZOOM_LEVEL, m_bMatchZoomLevel);
|
|
DDX_Text(pDX, IDC_HEIGHT_ORIG, m_sHeightOrig);
|
|
DDX_Text(pDX, IDC_WIDTH_ORIG, m_sWidthOrig);
|
|
DDX_Text(pDX, IDC_WIDTH_PERCENTS, m_nWidthPercents);
|
|
DDX_Text(pDX, IDC_WIDTH_PIXELS, m_nWidthPixels);
|
|
DDX_Text(pDX, IDC_HEIGHT_PERCENTS, m_nHeightPercents);
|
|
DDX_Text(pDX, IDC_HEIGHT_PIXELS, m_nHeightPixels);
|
|
DDX_Check(pDX, IDC_CHECK_CONVERT_TO, m_bConvertTo);
|
|
DDX_CBIndex(pDX, IDC_COMBO_CONVERT_TO, m_nConvertTo);
|
|
//}}AFX_DATA_MAP
|
|
}
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(CResampleImageDlg, CDialog)
|
|
//{{AFX_MSG_MAP(CResampleImageDlg)
|
|
ON_BN_CLICKED(IDC_CHECK_CONVERT_TO, OnCheckConvertTo)
|
|
ON_BN_CLICKED(IDC_CHECK_MAINTAIN_RATIO, OnCheckMaintainRatio)
|
|
ON_BN_CLICKED(IDC_CHECK_MATCH_ZOOM_LEVEL, OnCheckMatchZoomLevel)
|
|
ON_EN_CHANGE(IDC_HEIGHT_PERCENTS, OnChangeHeightPercents)
|
|
ON_EN_CHANGE(IDC_HEIGHT_PIXELS, OnChangeHeightPixels)
|
|
ON_EN_CHANGE(IDC_WIDTH_PERCENTS, OnChangeWidthPercents)
|
|
ON_EN_CHANGE(IDC_WIDTH_PIXELS, OnChangeWidthPixels)
|
|
ON_BN_CLICKED(ID_BUTTON_RESET, OnButtonReset)
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CResampleImageDlg message handlers
|
|
|
|
BOOL CResampleImageDlg::OnInitDialog()
|
|
{
|
|
CDialog::OnInitDialog();
|
|
|
|
// TODO: Add extra initialization here
|
|
|
|
// Define array of possible types of convertion
|
|
m_ctlComboConvertTo.AddString(_T("256 color (8-bit)"));
|
|
m_nConvertTo=0;
|
|
|
|
// Set the COXSpinCtrl object, which is mapped to a common Spin Control.
|
|
m_ctlSpinWidthPixels.SetBuddy(&m_ctlEditWidthPixels);
|
|
m_ctlSpinWidthPixels.SetRange(0,32767);
|
|
m_ctlSpinWidthPixels.SetPos(m_nWidthPixels);
|
|
|
|
// Set a default COXSpinCtrl method of delta value computation (Delta pixel = Delta value).
|
|
m_ctlSpinWidthPixels.SetComputationMethod(OX_SPIN_DELTA_PIXEL_IS_DELTA_VALUE);
|
|
|
|
// Set the COXSpinCtrl object, which is mapped to a common Spin Control.
|
|
m_ctlSpinHeightPixels.SetBuddy(&m_ctlEditHeightPixels);
|
|
m_ctlSpinHeightPixels.SetRange(0,32767);
|
|
m_ctlSpinHeightPixels.SetPos(m_nHeightPixels);
|
|
|
|
// Set a default COXSpinCtrl method of delta value computation (Delta pixel = Delta value).
|
|
m_ctlSpinHeightPixels.SetComputationMethod(OX_SPIN_DELTA_PIXEL_IS_DELTA_VALUE);
|
|
|
|
// Set the COXSpinCtrl object, which is mapped to a common Spin Control.
|
|
m_ctlSpinWidthPercents.SetBuddy(&m_ctlEditWidthPercents);
|
|
m_ctlSpinWidthPercents.SetRange(0,32767);
|
|
m_ctlSpinWidthPercents.SetPos(m_nWidthPercents);
|
|
|
|
// Set a default COXSpinCtrl method of delta value computation (Delta pixel = Delta value).
|
|
m_ctlSpinWidthPercents.SetComputationMethod(OX_SPIN_DELTA_PIXEL_IS_DELTA_VALUE);
|
|
|
|
// Set the COXSpinCtrl object, which is mapped to a common Spin Control.
|
|
m_ctlSpinHeightPercents.SetBuddy(&m_ctlEditHeightPercents);
|
|
m_ctlSpinHeightPercents.SetRange(0,32767);
|
|
m_ctlSpinHeightPercents.SetPos(m_nHeightPercents);
|
|
|
|
// Set a default COXSpinCtrl method of delta value computation (Delta pixel = Delta value).
|
|
m_ctlSpinHeightPercents.SetComputationMethod(OX_SPIN_DELTA_PIXEL_IS_DELTA_VALUE);
|
|
|
|
|
|
UpdateData(FALSE);
|
|
|
|
ShowControls();
|
|
|
|
return TRUE; // return TRUE unless you set the focus to a control
|
|
// EXCEPTION: OCX Property Pages should return FALSE
|
|
}
|
|
|
|
void CResampleImageDlg::ShowControls(BOOL bHeightChanged)
|
|
{
|
|
UpdateData(TRUE);
|
|
|
|
if(!m_bCanConvert)
|
|
{
|
|
// enable convertion controls only if we can do convertion
|
|
m_bConvertTo=FALSE;
|
|
m_ctlCheckConvertTo.EnableWindow(FALSE);
|
|
}
|
|
m_nConvertTo=0;
|
|
m_ctlComboConvertTo.EnableWindow(m_bConvertTo);
|
|
|
|
if(m_bMaintainRatio)
|
|
{
|
|
if(bHeightChanged)
|
|
{
|
|
// if we are going to maintain aspect ratio then
|
|
// recalculate width of image based on height
|
|
m_nWidthPercents=m_nHeightPercents;
|
|
m_nWidthPixels=((long)m_nOrigWidth*
|
|
(long)m_nHeightPixels)/((long)m_nOrigHeight);
|
|
}
|
|
else
|
|
{
|
|
// if we are going to maintain aspect ratio then
|
|
// recalculate height of image based on width
|
|
m_nHeightPercents=m_nWidthPercents;
|
|
m_nHeightPixels=((long)m_nOrigHeight*
|
|
(long)m_nWidthPixels)/((long)m_nOrigWidth);
|
|
}
|
|
}
|
|
|
|
if(m_bMatchZoomLevel)
|
|
{
|
|
// set height and width corresponding to current zoom level
|
|
m_bMaintainRatio=TRUE;
|
|
m_nWidthPercents=m_nCurrentZoomLevel;
|
|
m_nHeightPercents=m_nCurrentZoomLevel;
|
|
m_nWidthPixels=((long)m_nOrigWidth*(long)m_nCurrentZoomLevel)/(100L);
|
|
m_nHeightPixels=((long)m_nOrigHeight*(long)m_nCurrentZoomLevel)/(100L);
|
|
}
|
|
// set controls enable on/off
|
|
m_ctlCheckMatchZoomLevel.EnableWindow(m_bCanResize);
|
|
m_ctlCheckMaintainRatio.EnableWindow(!m_bMatchZoomLevel && m_bCanResize);
|
|
m_ctlEditWidthPixels.EnableWindow(!m_bMatchZoomLevel && m_bCanResize);
|
|
m_ctlSpinWidthPixels.EnableWindow(!m_bMatchZoomLevel && m_bCanResize);
|
|
m_ctlEditHeightPixels.EnableWindow(!m_bMatchZoomLevel && m_bCanResize);
|
|
m_ctlSpinHeightPixels.EnableWindow(!m_bMatchZoomLevel && m_bCanResize);
|
|
m_ctlEditWidthPercents.EnableWindow(!m_bMatchZoomLevel && m_bCanResize);
|
|
m_ctlSpinWidthPercents.EnableWindow(!m_bMatchZoomLevel && m_bCanResize);
|
|
m_ctlEditHeightPercents.EnableWindow(!m_bMatchZoomLevel && m_bCanResize);
|
|
m_ctlSpinHeightPercents.EnableWindow(!m_bMatchZoomLevel && m_bCanResize);
|
|
|
|
UpdateData(FALSE);
|
|
}
|
|
|
|
void CResampleImageDlg::OnCheckConvertTo()
|
|
{
|
|
// TODO: Add your control notification handler code here
|
|
ShowControls();
|
|
}
|
|
|
|
void CResampleImageDlg::OnCheckMaintainRatio()
|
|
{
|
|
// TODO: Add your control notification handler code here
|
|
ShowControls();
|
|
}
|
|
|
|
void CResampleImageDlg::OnCheckMatchZoomLevel()
|
|
{
|
|
// TODO: Add your control notification handler code here
|
|
ShowControls();
|
|
}
|
|
|
|
void CResampleImageDlg::OnChangeHeightPercents()
|
|
{
|
|
// TODO: If this is a RICHEDIT control, the control will not
|
|
// send this notification unless you override the CDialog::OnInitDialog()
|
|
// function to send the EM_SETEVENTMASK message to the control
|
|
// with the ENM_CHANGE flag ORed into the lParam mask.
|
|
|
|
// TODO: Add your control notification handler code here
|
|
UpdateData(TRUE);
|
|
m_nHeightPixels=((long)m_nOrigHeight*
|
|
(long)m_nHeightPercents)/((long)100);
|
|
UpdateData(FALSE);
|
|
ShowControls(TRUE);
|
|
}
|
|
|
|
void CResampleImageDlg::OnChangeHeightPixels()
|
|
{
|
|
// TODO: If this is a RICHEDIT control, the control will not
|
|
// send this notification unless you override the CDialog::OnInitDialog()
|
|
// function to send the EM_SETEVENTMASK message to the control
|
|
// with the ENM_CHANGE flag ORed into the lParam mask.
|
|
|
|
// TODO: Add your control notification handler code here
|
|
UpdateData(TRUE);
|
|
m_nHeightPercents=((long)100*(long)m_nHeightPixels)/
|
|
((long)m_nOrigHeight);
|
|
UpdateData(FALSE);
|
|
ShowControls(TRUE);
|
|
}
|
|
|
|
void CResampleImageDlg::OnChangeWidthPercents()
|
|
{
|
|
// TODO: If this is a RICHEDIT control, the control will not
|
|
// send this notification unless you override the CDialog::OnInitDialog()
|
|
// function to send the EM_SETEVENTMASK message to the control
|
|
// with the ENM_CHANGE flag ORed into the lParam mask.
|
|
|
|
// TODO: Add your control notification handler code here
|
|
UpdateData(TRUE);
|
|
m_nWidthPixels=((long)m_nOrigWidth*
|
|
(long)m_nWidthPercents)/((long)100);
|
|
UpdateData(FALSE);
|
|
ShowControls();
|
|
}
|
|
|
|
void CResampleImageDlg::OnChangeWidthPixels()
|
|
{
|
|
// TODO: If this is a RICHEDIT control, the control will not
|
|
// send this notification unless you override the CDialog::OnInitDialog()
|
|
// function to send the EM_SETEVENTMASK message to the control
|
|
// with the ENM_CHANGE flag ORed into the lParam mask.
|
|
|
|
// TODO: Add your control notification handler code here
|
|
UpdateData(TRUE);
|
|
m_nWidthPercents=((long)100*(long)m_nWidthPixels)/
|
|
((long)m_nOrigWidth);
|
|
UpdateData(FALSE);
|
|
ShowControls();
|
|
}
|
|
|
|
void CResampleImageDlg::OnButtonReset()
|
|
{
|
|
// TODO: Add your control notification handler code here
|
|
// set size of image to original
|
|
m_nWidthPercents=m_nCurrentZoomLevel;
|
|
m_nHeightPercents=m_nCurrentZoomLevel;
|
|
m_nWidthPixels=((long)m_nOrigWidth*(long)m_nCurrentZoomLevel)/(100L);
|
|
m_nHeightPixels=((long)m_nOrigHeight*(long)m_nCurrentZoomLevel)/(100L);
|
|
m_bMatchZoomLevel=FALSE;
|
|
UpdateData(FALSE);
|
|
ShowControls();
|
|
}
|