www.pudn.com > dip.rar > dipDoc.cpp


// dipDoc.cpp : implementation of the CDipDoc class 
// 
 
#include "stdafx.h" 
#include "dip.h" 
#include "afx.h" 
#include "dipDoc.h" 
#include "GreyDlg.h" 
 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
 
///////////////////////////////////////////////////////////////////////////// 
// CDipDoc 
 
IMPLEMENT_DYNCREATE(CDipDoc, CDocument) 
 
BEGIN_MESSAGE_MAP(CDipDoc, CDocument) 
	//{{AFX_MSG_MAP(CDipDoc) 
	ON_COMMAND(ID_grey, Ongrey) 
	//}}AFX_MSG_MAP 
END_MESSAGE_MAP() 
 
///////////////////////////////////////////////////////////////////////////// 
// CDipDoc construction/destruction 
 
CDipDoc::CDipDoc() 
{ 
	// TODO: add one-time construction code here 
	//初始化图像数据和调色板 
	ImgWidth=0; 
	ImgHeight=0; 
	ImgData=NULL; 
	palette=NULL; 
} 
 
CDipDoc::~CDipDoc() 
{ 
	//释放所分配的空间 
	if (ImgData) delete []ImgData; 
	if (palette) delete []palette; 
} 
 
BOOL CDipDoc::OnNewDocument() 
{ 
	if (!CDocument::OnNewDocument()) 
		return FALSE; 
 
	// TODO: add reinitialization code here 
	// (SDI documents will reuse this document) 
 
	return TRUE; 
} 
 
 
 
///////////////////////////////////////////////////////////////////////////// 
// CDipDoc serialization 
 
void CDipDoc::Serialize(CArchive& ar) 
{ 
	if (ar.IsStoring()) 
	{ 
		// TODO: add storing code here 
	} 
	else 
	{ 
		// TODO: add loading code here 
	} 
} 
 
///////////////////////////////////////////////////////////////////////////// 
// CDipDoc diagnostics 
 
#ifdef _DEBUG 
void CDipDoc::AssertValid() const 
{ 
	CDocument::AssertValid(); 
} 
 
void CDipDoc::Dump(CDumpContext& dc) const 
{ 
	CDocument::Dump(dc); 
} 
#endif //_DEBUG 
 
///////////////////////////////////////////////////////////////////////////// 
// CDipDoc commands 
 
//打开文件名为filename的文件,并从中读取信息 
void CDipDoc::FileOpen(CString filename) 
{ 
	CString promt;//提示字符串 
	int flag=true;//标志是否成功的打开文件 
	CFile fp;     //新建一个文件 
	BYTE num[4]; 
 
	//打开文件 
	fp.Open(filename,CFile::modeRead|CFile::typeBinary); 
	if (fp==NULL) 
	{ 
		promt="Can't Open file "+filename; 
		AfxMessageBox(promt); 
		flag=false; 
	} 
 
	//保存图像信息 
	fp.Read(header,14);			//位图文件头 
	fp.Read(infoheader,40);	 
	//位图信息头 
	//读取biClrUsed色彩数目 
	fp.Seek(46,CFile::begin);	 
	fp.Read(num,4); 
	colorused=(num[3]<<24)|(num[2]<<16)|(num[1]<<8)|num[0]; 
	//如果biClrUsed为0,则读取biBitCount像素位数目 
	if (!colorused)			 
	{ 
		fp.Seek(28,CFile::begin); 
		fp.Read(num,2); 
		colorused=(num[1]<<8)|num[0]; 
		colorused=1<