www.pudn.com > 医学图像处理示例源代码.rar > PreviewDlg.cpp


// PreviewDlg.cpp : implementation file 
// 
 
#include "stdafx.h" 
#include "ImageLAB.h" 
#include "AllImage.h" 
#include "PreviewDlg.h" 
#include "CommonProc.h" 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
 
///////////////////////////////////////////////////////////////////////////// 
// CPreviewDlg 
 
IMPLEMENT_DYNAMIC(CPreviewDlg, CFileDialog) 
 
CPreviewDlg::CPreviewDlg(BOOL bOpenFileDialog, LPCTSTR lpszDefExt, LPCTSTR lpszFileName, 
		DWORD dwFlags, LPCTSTR lpszFilter, CWnd* pParentWnd) : 
		CFileDialog(bOpenFileDialog, lpszDefExt, lpszFileName, dwFlags, lpszFilter, pParentWnd) 
{ 
	SetTemplate(0,IDD_CUSTOM_FILEOPEN); 
	BigImage = false; 
	imgDepth = 24; 
	imgW = imgH = 0; 
} 
 
BEGIN_MESSAGE_MAP(CPreviewDlg, CFileDialog) 
	//{{AFX_MSG_MAP(CPreviewDlg) 
		// NOTE - the ClassWizard will add and remove mapping macros here. 
	//}}AFX_MSG_MAP 
END_MESSAGE_MAP() 
 
void CPreviewDlg::OnFileNameChange( ) 
{ 
	ImageFileName = GetFileName(); 
	imgW = imgH = 0; 
	if(IsExistFile(ImageFileName)) 
	{ 
		if(ImageFileName.Right(3) == "bmp" ||ImageFileName.Right(3) == "BMP") 
		{ 
			Image.GetImageDimensions(ImageFileName, imgW, imgH , imgDepth); 
		} 
		else if(ImageFileName.Right(3) == "pbm" ||ImageFileName.Right(3) == "PBM") 
		{     
			Image.GetImageDimensions(ImageFileName, imgW, imgH , imgDepth); 
		} 
		else if(ImageFileName.Right(3) == "pgm" ||ImageFileName.Right(3) == "PGM") 
		{     
			Image.GetImageDimensions(ImageFileName, imgW, imgH , imgDepth); 
		} 
		else if(ImageFileName.Right(3) == "jpg" ||ImageFileName.Right(3) == "JPG") 
		{     
			JpegFile::GetJPGDimensions(ImageFileName, imgW, imgH, imgDepth); 
		} 
		else if(ImageFileName.Right(3) == "gif" ||ImageFileName.Right(3) == "GIF") 
		{     
			Image.GifImage.GIFGetDimensions(ImageFileName, &imgW, &imgH); 
		} 
		else if(ImageFileName.Right(3) == "img" ||ImageFileName.Right(3) == "IMG") 
		{     
			Image.GetImageDimensions(ImageFileName, imgW, imgH , imgDepth); 
		} 
		else if(ImageFileName.Right(3) == "pcx" ||ImageFileName.Right(3) == "PCX") 
		{     
			Image.GetImageDimensions(ImageFileName, imgW, imgH , imgDepth); 
		} 
 
		BigImage = !(imgW<1030 && imgH<1030); 
		if(!BigImage) 
		{ 
			Image.ReadImageFromFile(ImageFileName);			 
		} 
		DrawImage(); 
	} 
} 
 
void CPreviewDlg::DrawImage( ) 
{ 
	CStatic* pic = (CStatic*)GetDlgItem(IDC_IMAGE); 
	CClientDC dc(pic); 
	CRect rect,crect; 
	CString msg; 
	msg.Format("图像宽度: %3d (pixels)", imgW); 
	SetDlgItemText(IDC_IMAGEWIDTH,msg); 
	msg.Format("图像高度: %3d (pixels)", imgH); 
	SetDlgItemText(IDC_IMAGEHEIGHT,msg); 
	msg.Format("像素深度: %3d (bits)",   imgDepth); 
	SetDlgItemText(IDC_IMAGEINFO1,msg); 
	msg.Format("图像大小: %3d (bytes)",  imgW*imgH); 
	SetDlgItemText(IDC_IMAGEINFO3,msg); 
	 
	if(!BigImage&&Image.m_lpDibArray!=NULL) 
	{				 
		pic->GetWindowRect(&rect); 
		GetParent()->ScreenToClient(rect); 
     
		pic->GetClientRect(&crect); 
		pic->InvalidateRect(crect, FALSE); 
		int ClientWidth = int((double)crect.Height()*imgW/(double)imgH+0.5); 
		if(ClientWidth>(1.5*rect.Height()))  ClientWidth = int(1.5*rect.Height()); 
		pic->SetWindowPos(NULL,rect.left,rect.top,ClientWidth,rect.Height(),SWP_NOACTIVATE); 
		pic->GetClientRect(&crect); 
		//TRACE("%d %d %d %d\n",crect.left,crect.top,crect.right,crect.bottom); 
		Image.ShowCurrentImage(&dc,crect);	 
		msg.Format("显示比例: %5.1f%%",Image.m_fScale*100); 
		SetDlgItemText(IDC_IMAGEINFO2,msg); 
	} 
	else 
	{ 
		pic->GetWindowRect(&rect); 
		rect.top +=10;  
		dc.DrawText("图像太大了!!!", rect, DT_CENTER); 
	} 
}