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<