⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 testdoc.cpp

📁 Handwritten digital recognition is made by matlab nerve network toolbox in visual c++.net
💻 CPP
字号:
// testDoc.cpp : implementation of the CTestDoc class
//

#include "stdafx.h"
#include "test.h"
#include "User.h"
#include "testDoc.h"
#include "Glob.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CTestDoc

IMPLEMENT_DYNCREATE(CTestDoc, CDocument)

BEGIN_MESSAGE_MAP(CTestDoc, CDocument)
	//{{AFX_MSG_MAP(CTestDoc)
		// NOTE - the ClassWizard will add and remove mapping macros here.
		//    DO NOT EDIT what you see in these blocks of generated code!
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CTestDoc construction/destruction

CTestDoc::CTestDoc()
{
	// TODO: add one-time construction code here

}

CTestDoc::~CTestDoc()
{
}

BOOL CTestDoc::OnNewDocument()
{
	if (!CDocument::OnNewDocument())
		return FALSE;

	// TODO: add reinitialization code here
	// (SDI documents will reuse this document)

	return TRUE;
}



/////////////////////////////////////////////////////////////////////////////
// CTestDoc serialization

void CTestDoc::Serialize(CArchive& ar)
{
	if (ar.IsStoring())
	{
		// TODO: add storing code here
	}
	else
	{
		// TODO: add loading code here
	}
}

/////////////////////////////////////////////////////////////////////////////
// CTestDoc diagnostics

#ifdef _DEBUG
void CTestDoc::AssertValid() const
{
	CDocument::AssertValid();
}

void CTestDoc::Dump(CDumpContext& dc) const
{
	CDocument::Dump(dc);
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CTestDoc commands

BOOL CTestDoc::OnOpenDocument(LPCTSTR lpszPathName)
{
	LONG doc_x,doc_y;
LOGPALETTE *pPal;//定义逻辑调色板指针; 
pPal=new LOGPALETTE;//初始化该指针; 
CFile file; 
CFileException fe; 
if (!file.Open(lpszPathName, CFile::modeRead | CFile::shareDenyWrite, &fe)) 
{//以"读"的方式打开文件; 
AfxMessageBox("图像文件打不开!"); 
return FALSE; 
} 
DeleteContents();//删除文挡; 
BeginWaitCursor(); 
BITMAPFILEHEADER bmfHeader;//定义位图文件头结构; 
LPBITMAPINFO lpbmi; 
DWORD dwBitsSize; 
HANDLE hDIB; 
LPSTR pDIB;//指向位图数据的指针; 
BITMAPINFOHEADER *bmhdr;//指向位图信息头结构的指针 
dwBitsSize = file.GetLength();//得到文件长度 
if (file.Read((LPSTR)&bmfHeader, sizeof(bmfHeader)) !=sizeof(bmfHeader)) 
return FALSE;//读取位图文件的文件头结构信息; 
if (bmfHeader.bfType != 0x4d42) //检查该文件是否为BMP格式的文件; 
return FALSE; 
hDIB=(HANDLE) ::GlobalAlloc(GMEM_MOVEABLE | GMEM_ZEROINIT, dwBitsSize); 
//为读取图像文件数据申请缓冲区 
if (hDIB == 0) 
{ 
return FALSE; 
} 
pDIB = (LPSTR) ::GlobalLock((HGLOBAL)hDIB); 
//得到申请的缓冲区的指针; 
if (file.ReadHuge(pDIB, dwBitsSize - sizeof(BITMAPFILEHEADER)) != 
dwBitsSize - sizeof(BITMAPFILEHEADER) ) 
{ 
::GlobalUnlock((HGLOBAL)hDIB); 
hDIB=NULL; 
return FALSE; 
}//此时pDIB数据块中读取的数据包括位图头信息、位图颜色表、图像像素的灰度值; 
bmhdr=(BITMAPINFOHEADER*)pDIB;//为指向位图信息头结构的指针赋值; 
::GlobalUnlock((HGLOBAL)hDIB); 
//if ((*bmhdr).biBitCount!=8)//验证是否为8bit位图 
//{ 
//AfxMessageBox("该文件不是灰度位图格式!"); 
//return FALSE; 
//} 
//m_hDIB=hDIB;//将内部变量数据赋于全局变量; 
//下面是记录位图的尺寸; 
doc_x=bmhdr->biWidth; 
doc_y=bmhdr->biHeight; 
//下面是根据颜色表生成调色板; 
//m_palDIB=new Cpalette; 
/*HPALETTE   m_palDIB   =   NULL;
pPal->palVersion=0x300;//填充逻辑颜色表 
pPal->palNumEntries=256; 
lpbmi=(LPBITMAPINFO)bmhdr; 
for(int i=0;i<256;i++) 
{//每个颜色表项的R、G、B值相等,并且各个值从"0"到"255"序列展开; 
pPal->palPalEntry[i].peRed=lpbmi->bmiColors[i].rgbRed; 
pPal->palPalEntry[i].peGreen=lpbmi->bmiColors[i].rgbGreen; 
pPal->palPalEntry[i].peBlue= lpbmi->bmiColors[i].rgbBlue;; 
pPal->palPalEntry[i].peFlags=0; 
} 
m_palDIB=CreatePalette(pPal); 
//根据读入的数据得到位图的宽、高、颜色表; 
if(pPal) 
delete pPal; 
EndWaitCursor(); 
SetPathName("D:\9.bmp");//设置存储路径 
*/
BYTE *lpDIBBits;//指向位图像素灰度值的指针; 
lpDIBBits=(BYTE*)(pDIB)+sizeof(BITMAPINFOHEADER)+2*sizeof(RGBQUAD);//+bmfHeader.bfOffBits+sizeof(BITMAPINFOHEADER)+sizeof(RGBQUAD);//+256;*sizeof(RGBQUAD)获取指向图像像素值; 
mapdata.RemoveAll();
for (int j=0;j<doc_y;j++) 
{
	
  for (int i=0;i<18;i++) 
  {
	  mapdata.Add(*lpDIBBits);
      lpDIBBits++;
  }
  lpDIBBits += 2 ;

}
mapdata.Add(BYTE(doc_x));
mapdata.Add(BYTE(doc_y));

SetModifiedFlag(FALSE); // 设置文件修改标志为FALSE 
return TRUE; 

}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -