📄 imagedlg.cpp
字号:
// ImageDlg.cpp : implementation file
//
#include "stdafx.h"
#include "12ImageTest.h"
#include "ImageDlg.h"
// CImageDlg dialog
IMPLEMENT_DYNAMIC(CImageDlg, CDialog)
CImageDlg::CImageDlg(CWnd* pParent /*=NULL*/)
: CDialog(CImageDlg::IDD, pParent)
{
}
CImageDlg::~CImageDlg()
{
}
void CImageDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CImageDlg, CDialog)
ON_BN_CLICKED(IDC_BROWSE, &CImageDlg::OnBnClickedBrowse)
ON_BN_CLICKED(IDC_READOUT, &CImageDlg::OnBnClickedReadout)
ON_WM_PAINT()
END_MESSAGE_MAP()
//从文件夹浏览并显示图片
void CImageDlg::OnBnClickedBrowse()
{
CFile f;
CString FilePathName;
CFileException e;
CFileDialog dlg(TRUE,NULL,NULL,0,_T("All Files (*.*)|*.*|BMP (*.bmp)|*.bmp|DIB (*.dib)|*.dib|EMF (*.emf)|*.emf|GIF (*.gif)|*.gif|ICO (*.ico)|*.ico|JPG (*.jpg)|*.jpg|WMF (*.wmf)|*.wmf||"),NULL);
if(dlg.DoModal()==IDOK)
{
int nSize;
BYTE *pBuffer;
FileTitle=dlg.GetFileTitle();//得到文件名,没有包括扩展名
FileEXt=dlg.GetFileExt(); // 得到扩展名,没有包括文件名
FilePathName=dlg.GetPathName();//文件路径
if(m_Pic.m_IPicture != NULL) m_Pic.FreePictureData();
if(f.Open(FilePathName, CFile::modeRead | CFile::typeBinary, &e))
{
nSize = f.GetLength(); //先得到文件长度
pBuffer = new BYTE [nSize]; //按文件的大小在堆上申请一块内存
f.Read(pBuffer, nSize); //把文件读到pBuffer(堆上申请一块内存)
}
//获得主程序的路径
CString sPath;
GetModuleFileName(NULL,sPath.GetBufferSetLength (MAX_PATH+1),MAX_PATH);
sPath.ReleaseBuffer ();
int nPos;
nPos=sPath.ReverseFind ('\\');
sPath=sPath.Left (nPos);
CString str;
str.Format("%s%s%s%s%s",sPath,_T("\\临时图片\\"),m_sname,_T("."),FileEXt); //文件名和后缀名
CFile outFile(str,CFile::modeCreate|CFile::modeWrite);
outFile.Write(pBuffer,nSize);
m_Pic.LoadPictureData(pBuffer,nSize);
f.Close(); //关闭文件
outFile.Close();
delete []pBuffer; //删除内存区域
CClientDC dc(this);
//清空显示区域
CRect rect;
GetClientRect(&rect);
dc.SelectStockObject(WHITE_BRUSH);
dc.Rectangle(0,50,rect.right,rect.bottom);
//显示图片
m_Pic.UpdateSizeOnDC(&dc);
//判断图片是否超过显示区域,如果超过,按等比例压缩。
if (m_Pic.m_Width >= m_Pic.m_Height) //图片宽度大于等于高度的情况
{
if (m_Pic.m_Width >= rect.Width())
{
long zoom = m_Pic.m_Width / rect.Width();
m_Pic.m_Width = rect.Width();
m_Pic.m_Height = m_Pic.m_Height/zoom;
}
}
if (m_Pic.m_Width < m_Pic.m_Height)//图片宽度小于高度的情况
{
if (m_Pic.m_Height > (rect.Height()-50))
{
long zoom = m_Pic.m_Height / (rect.Height()-50);
m_Pic.m_Height = rect.Height();
m_Pic.m_Width = m_Pic.m_Width/zoom;
}
}
m_Pic.Show(&dc, CRect(0,50,m_Pic.m_Width,m_Pic.m_Height));
}
}
//图片导出到文件夹
void CImageDlg::OnBnClickedReadout()
{
//获得主程序路径
CString sPath;
GetModuleFileName(NULL,sPath.GetBufferSetLength (MAX_PATH+1),MAX_PATH);
sPath.ReleaseBuffer ();
int nPos;
nPos=sPath.ReverseFind ('\\');
sPath=sPath.Left (nPos);
//获得点中的文件名
CString str;
str.Format("%s%s%s%s%s",sPath,_T("\\临时图片\\"),m_sname,".",m_sEXt); //文件名和后缀名
CFile f;
CString FilePathName;
CFileException e;
CString m_AddExt;
m_AddExt.Format("%s%s",_T("*."),m_sEXt);
CFileDialog dlg(FALSE,NULL,m_OutFileName,0,m_AddExt,NULL);
if(dlg.DoModal()==IDOK)
{
FilePathName=dlg.GetPathName();//文件路径
CString m_fullname;
m_fullname.Format("%s%s%s",FilePathName,_T("."),m_sEXt);
CopyFile(str,m_fullname,FALSE);
}
}
BOOL CImageDlg::OnInitDialog()
{
CDialog::OnInitDialog();
return TRUE;
}
void CImageDlg::OnPaint()
{
CPaintDC dc(this);
//清空显示区域
CRect rect;
GetClientRect(&rect);
dc.SelectStockObject(WHITE_BRUSH);
dc.Rectangle(0,50,rect.right,rect.bottom);
//获得主程序路径
CString sPath;
GetModuleFileName(NULL,sPath.GetBufferSetLength (MAX_PATH+1),MAX_PATH);
sPath.ReleaseBuffer ();
int nPos;
nPos=sPath.ReverseFind ('\\');
sPath=sPath.Left (nPos);
//获得点中的文件名
CString str;
str.Format("%s%s%s%s%s",sPath,_T("\\临时图片\\"),m_sname,".",m_sEXt); //文件名和后缀名
//获取图片数据
CFile f;
CString FilePathName;
CFileException e;
if(m_Pic.m_IPicture != NULL) m_Pic.FreePictureData();
if(f.Open(str, CFile::modeRead | CFile::typeBinary, &e))
{
int nSize;
BYTE *pBuffer;
nSize = f.GetLength(); //先得到文件长度
pBuffer = new BYTE [nSize]; //按文件的大小在堆上申请一块内存
f.Read(pBuffer, nSize); //把文件读到pBuffer(堆上申请一块内存)
m_Pic.LoadPictureData(pBuffer,nSize);
delete [] pBuffer; //删掉堆上申请的那一块内存
f.Close(); //关闭文件
}
m_Pic.UpdateSizeOnDC(&dc);
//判断图片是否超过显示区域,如果超过,按等比例压缩。
if (m_Pic.m_Width >= m_Pic.m_Height) //图片宽度大于等于高度的情况
{
if (m_Pic.m_Width >= rect.Width())
{
long zoom = m_Pic.m_Width / rect.Width();
m_Pic.m_Width = rect.Width();
m_Pic.m_Height = m_Pic.m_Height/zoom;
}
}
if (m_Pic.m_Width < m_Pic.m_Height)//图片宽度小于高度的情况
{
if (m_Pic.m_Height > (rect.Height()-50))
{
long zoom = m_Pic.m_Height / (rect.Height()-50);
m_Pic.m_Height = rect.Height();
m_Pic.m_Width = m_Pic.m_Width/zoom;
}
}
m_Pic.Show(&dc, CRect(0,50,m_Pic.m_Width,m_Pic.m_Height));
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -