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

📄 bmpdisplaydoc.cpp

📁 用VC编写的基于K-means的车牌识别程序
💻 CPP
字号:
// BmpDisplayDoc.cpp : implementation of the CBmpDisplayDoc class
//

#include "stdafx.h"
#include "BmpDisplay.h"

#include "BmpDisplayDoc.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CBmpDisplayDoc

IMPLEMENT_DYNCREATE(CBmpDisplayDoc, CDocument)

BEGIN_MESSAGE_MAP(CBmpDisplayDoc, CDocument)
	//{{AFX_MSG_MAP(CBmpDisplayDoc)
	ON_COMMAND(ID_BMPOPEN, OnBmpopen)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CBmpDisplayDoc construction/destruction

CBmpDisplayDoc::CBmpDisplayDoc()
{
memset(huidu,0,sizeof(huidu));
	// TODO: add one-time construction code here

}

CBmpDisplayDoc::~CBmpDisplayDoc()
{

		HeapFree(GetProcessHeap(),0,pbi);
		HeapFree(GetProcessHeap(),0,lpBuf);
        HeapFree(GetProcessHeap(),0,qlpBuf);
		HeapFree(GetProcessHeap(),0,rlpBuf);
        HeapFree(GetProcessHeap(),0,ylpBuf);
        HeapFree(GetProcessHeap(),0,zlpBuf);
		HeapFree(GetProcessHeap(),0,flpBuf);


}

BOOL CBmpDisplayDoc::OnNewDocument()
{
	if (!CDocument::OnNewDocument())
		return FALSE;
 SetTitle("K-MEANS分割字符系统实验!");   
  return   TRUE; 

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

	return TRUE;
}



/////////////////////////////////////////////////////////////////////////////
// CBmpDisplayDoc serialization

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

/////////////////////////////////////////////////////////////////////////////
// CBmpDisplayDoc diagnostics

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

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

/////////////////////////////////////////////////////////////////////////////
// CBmpDisplayDoc commands

void CBmpDisplayDoc::OnBmpopen() 
{

	LPCTSTR lpszFilter="BMP Files(*.bmp)|*.bmp|*.*";
	CFileDialog dlg1(TRUE,lpszFilter,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT ,lpszFilter,NULL);
	//CString filename;
	CFile file;
	if(dlg1.DoModal()==IDOK)
	{
		filename=dlg1.GetPathName();
		if(file.Open(filename,CFile::modeRead|CFile::shareDenyNone,NULL)==0)
		{
			AfxMessageBox("无法打开文件!",MB_OK,0);
			return;
		}
		file.Read(&bf,sizeof(bf));
		if(bf.bfType!=0x4d42)//'BM'
		{
			AfxMessageBox("非BMP文件!",MB_OK,0);
			return;
		}
		if(file.GetLength()!=bf.bfSize)
		{
			AfxMessageBox("文件已破坏!",MB_OK,0);
			return;
		}
		file.Read(&bi,sizeof(bi));
		numQuad=0;
		//Dibwidth=(bi.biWidth *bi.biBitCount+31)*32/4;
		Dibwidth=bi.biSizeImage/bi.biHeight;
		if(bi.biBitCount<24)
		{
			numQuad=1<<bi.biBitCount;
		}
		pbi=(BITMAPINFO*)HeapAlloc(GetProcessHeap(),0,sizeof(BITMAPINFOHEADER)+numQuad*sizeof(RGBQUAD));
        zpbi=(BITMAPINFO*)HeapAlloc(GetProcessHeap(),0,sizeof(BITMAPINFOHEADER)+numQuad*sizeof(RGBQUAD));
		memcpy(pbi,&bi,sizeof(bi));
		quad=(RGBQUAD*)((BYTE*)pbi+sizeof(BITMAPINFOHEADER));
		if(numQuad!=0)
		{
			file.Read(quad,sizeof(RGBQUAD)*numQuad);
		}
		bi.biSizeImage =bf.bfSize -bf.bfOffBits;
		lpBuf=(BYTE*)HeapAlloc(GetProcessHeap(),0,bi.biSizeImage);
		file.Read(lpBuf,bi.biSizeImage);
		file.Close();
		flag=1;
       grayflag=0;
	   rflag=0;
       qflag=0;
	   yflag=0;
       zflag=0;
	   fflag=0;
	   cflag=0;
 
	}
}

⌨️ 快捷键说明

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