VS2005图像处理程序的源代码

源代码在线查看: zoomdlg.cpp

软件大小: 9690 K
上传用户: evenxyz
关键词: 2005 VS 图像处理程序 源代码
下载地址: 免注册下载 普通下载 VIP

相关代码

				// ZoomDlg.cpp : 实现文件
				//
				
				#include "stdafx.h"
				#include "photoshow.h"
				#include "ZoomDlg.h"
				#include "MainFrm.h"
				#include "photoshowDoc.h"
				#include "photoshowView.h"
				#include "GeoOperator.h"
				
				
				// CZoomDlg 对话框
				
				IMPLEMENT_DYNAMIC(CZoomDlg, CDialog)
				
				CZoomDlg::CZoomDlg(CWnd* pParent /*=NULL*/)
					: CDialog(CZoomDlg::IDD, pParent)
					, m_nWidth(0)
					, m_nHeight(0)
					, m_bIsPro(TRUE)
					, m_nType(0)
				{
					m_bModify = false;
				}
				
				CZoomDlg::~CZoomDlg()
				{
				}
				
				void CZoomDlg::DoDataExchange(CDataExchange* pDX)
				{
					CDialog::DoDataExchange(pDX);
					DDX_Text(pDX, IDC_WIDTH, m_nWidth);
					DDX_Text(pDX, IDC_HEIGHT, m_nHeight);
					DDX_Check(pDX, IDC_PRO, m_bIsPro);
					DDX_CBIndex(pDX, IDC_MDOE, m_nType);
				}
				
				
				BEGIN_MESSAGE_MAP(CZoomDlg, CDialog)
					ON_BN_CLICKED(IDC_PREV, &CZoomDlg::OnBnClickedPrev)
					ON_EN_CHANGE(IDC_WIDTH, &CZoomDlg::OnEnChangeWidth)
					ON_EN_CHANGE(IDC_HEIGHT, &CZoomDlg::OnEnChangeHeight)
					ON_BN_CLICKED(IDC_PRO, &CZoomDlg::OnBnClickedPro)
					ON_BN_CLICKED(IDOK, &CZoomDlg::OnBnClickedOk)
					ON_BN_CLICKED(IDCANCEL, &CZoomDlg::OnBnClickedCancel)
				END_MESSAGE_MAP()
				
				
				// CZoomDlg 消息处理程序
				
				BOOL CZoomDlg::OnInitDialog()
				{
					CDialog::OnInitDialog();
				
					CMainFrame* pMain = (CMainFrame*)AfxGetMainWnd();
					CphotoshowView* pView = (CphotoshowView*)pMain->GetActiveView();
				
					m_nWidth = m_nSrcWidth = pView->m_nPicWidth;
					m_nHeight = m_nSrcHeight = pView->m_nPicHeight;
				
					UpdateData(FALSE);
				
					return TRUE;  // return TRUE unless you set the focus to a control
					// 异常: OCX 属性页应返回 FALSE
				}
				
				void CZoomDlg::OnBnClickedPrev()
				{
					Refresh();
				
					CPreviewDlg dlg;
					dlg.m_nType = 1;
					dlg.DoModal();
				}
				
				void CZoomDlg::OnEnChangeWidth()
				{
					UpdateData(TRUE);
				
					if (m_nWidth > 4000)
						m_nWidth = 4000;
					if (m_nWidth 						m_nWidth = 1;
				
					UpdateData(FALSE);
					RefreshSize(true);
				}
				
				void CZoomDlg::OnEnChangeHeight()
				{
					UpdateData(TRUE);
				
					if (m_nHeight > 4000)
						m_nHeight = 4000;
					if (m_nHeight 						m_nHeight = 1;
				
					UpdateData(FALSE);
					RefreshSize(false);
				}
				
				void CZoomDlg::OnBnClickedPro()
				{
					RefreshSize(true);
				}
				
				void CZoomDlg::OnBnClickedOk()
				{
					CMainFrame* pMain = (CMainFrame*)AfxGetMainWnd();
					CphotoshowView* pView = (CphotoshowView*)pMain->GetActiveView();
				
					Refresh();
					pView->OnFileSave();
					m_bModify = false;
					OnOK();
				}
				
				void CZoomDlg::OnBnClickedCancel()
				{
					if (m_bModify)
					{
						if (IDYES == MessageBox(L"图像已经更改,是否保存?", L"photoshow", MB_YESNO))
							OnBnClickedOk();
					}
					OnCancel();
				}
				
				void CZoomDlg::Refresh(void)
				{
					UpdateData(TRUE);
				
					// 更新预览对话框
					CMainFrame* pMain = (CMainFrame*)AfxGetMainWnd();
					CphotoshowView* pView = (CphotoshowView*)pMain->GetActiveView();
					double fx = (double)m_nWidth / pView->m_nPicWidth;
					double fy = (double)m_nHeight / pView->m_nPicHeight;
				
					SAFE_DELETE_ARRAY (pView->m_pImageTempBuffer);
				
					if (m_nType == 0)
						ZoomNormal(pView->m_pImageBuffer, pView->m_pImageTempBuffer, 
								   pView->m_nPicWidth, pView->m_nPicHeight, pView->m_nTempWidth, 
								   pView->m_nTempHeight, fx, fy);
					else
						ZoomInterpolation(pView->m_pImageBuffer, pView->m_pImageTempBuffer, 
										  pView->m_nPicWidth, pView->m_nPicHeight, 
										  pView->m_nTempWidth, pView->m_nTempHeight, 
										  fx, fy);
					m_bModify = true;
				}
				
				void CZoomDlg::RefreshSize(bool width)
				{
					UpdateData(TRUE);
				
					if (!m_bIsPro)
						return;
				
					if (width)	// 以宽度缩放比例修改高度
					{
						double fx = (double)m_nWidth / m_nSrcWidth;
						m_nHeight = (int)(m_nSrcHeight * fx);
					}
					else		// 以高度缩放比例修改宽度
					{
						double fy = (double)m_nHeight / m_nSrcHeight;
						m_nWidth = (int)(m_nSrcWidth * fy);
					}
				
					UpdateData(FALSE);
				}
							

相关资源