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

📄 useteeth.cpp

📁 关于位图结构的一次编程练习
💻 CPP
字号:
// UseTeeth.cpp: implementation of the CUseTeeth class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "Teeth.h"
#include "UseTeeth.h"

#include "fstream.h"
#include "math.h"
#include "UseTeeth.h"

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

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CUseTeeth	m_teeth;

CUseTeeth::CUseTeeth()
{
	m_bFlagHaveData = false;
	m_lDataNum = 0;

}

CUseTeeth::~CUseTeeth()
{

}

void CUseTeeth::ReadBitMap()
{
	CFileDialog	fileDlg(true);
	fileDlg.m_ofn.lpstrTitle ="选择bmp文件"; 
	fileDlg.m_ofn.lpstrFilter = "Bitmap Files(*.bmp)\0*.bmp\0All Files(*.*)\0*.*\0\0";
	fileDlg.m_ofn.Flags|=OFN_ALLOWMULTISELECT|OFN_CREATEPROMPT;//可以选择多个文件

	fstream	fileBmp;
	BITMAPFILEHEADER	bfHeader;//定义一个文件标题结构
	BITMAPINFOHEADER	biHeader;//定义一个信息标题结构
	long	boff;
	
	if(IDOK == fileDlg.DoModal())//
	{	
		CString sPathName,sDestName;
		POSITION pos=fileDlg.GetStartPosition();
		while(pos)
		{
			m_lDataNum = 0;//将目标象素点的个数置0,为了多次读取文件
			sPathName = fileDlg.GetNextPathName(pos);

			fileBmp.open(sPathName, ios::in|ios::binary|ios::nocreate);
			fileBmp.read((signed char*)&bfHeader,sizeof(bfHeader));
			boff = bfHeader.bfOffBits;//头文件的长度,文件从开始到实际位图起点的字节偏移量
			//bfHeader.
			fileBmp.read((signed char*)&biHeader,sizeof(biHeader));
			long BitCount=biHeader.biBitCount;

			for(int i=0; i< nRowSize; i++)
			{
					for(int j=0; j< nColumnSize; j++)
					{
						fileBmp.read((unsigned char *)&m_nMapColor[i][j],sizeof(m_nMapColor[i][j]));										
						//限定灰度范围
						if (m_nMapColor[i][j].rgbRed >nCtrlColor &&
							m_nMapColor[i][j].rgbGreen ==m_nMapColor[i][j].rgbBlue &&
							m_nMapColor[i][j].rgbBlue==m_nMapColor[i][j].rgbRed)
						{
							m_sCoordinate[m_lDataNum].dX = j * dCellSize;
							m_sCoordinate[m_lDataNum].dY = i * dCellSize;
							m_lDataNum++;
							
						}
					}
			}			
			m_bFlagHaveData = true;//数组中已经有数据
			fileBmp.close();			

			sDestName=sPathName.Mid(0);
			while(-1!=sDestName.Find("\\"))
			{				
				sDestName=sDestName.Mid(sDestName.Find("\\")+1);
			};
			sDestName=sDestName.Left(sDestName.Find('.'));
			WriteData(sDestName);
		}
	}
}

void CUseTeeth::WriteData()
{
	CFileDialog fileDlg(FALSE);
	fileDlg.m_ofn.lpstrTitle="文件保存对话框";
	fileDlg.m_ofn.lpstrFilter="Text Files(*.txt)\0*.txt\0All Files(*.*)\0*.*\0\0";
	fileDlg.m_ofn.lpstrDefExt="txt";

	if(IDOK==fileDlg.DoModal())
	{
		CStdioFile file(fileDlg.GetFileName(),CFile::modeCreate | CFile::modeWrite);
		
		char* strData=new char[100];
	
		long i=0;
		while(i < m_lDataNum)
		{
			// 	memset(strData,0,100);	
			
			//将数据连接称一个字符串,格式为:x值 退格 y值 换行// \t为table,\n为换行
			sprintf(strData, "%lf%s%lf%s", m_sCoordinate[i].dX, "\t", m_sCoordinate[i].dY,"\n");
			file.WriteString(strData);
			i++;
		}			
		m_bFlagHaveData = false;
		file.Close();
	}
}

void CUseTeeth::WriteData(const CString dataName)
{
		CString	strName = dataName + ".txt";
	
		CStdioFile file(strName,CFile::modeCreate | CFile::modeWrite);
		
		char* strData=new char[100];
		long i=0;
		while(i < m_lDataNum)
		{
			//将数据连接称一个字符串,格式为:x值 退格 y值 换行// \t为table,\n为换行
			sprintf(strData, "%lf%s%lf%s", m_sCoordinate[i].dX, "\t", m_sCoordinate[i].dY,"\n");
			file.WriteString(strData);
			i++;
		}			
		m_bFlagHaveData = false;
		file.Close();

}


void CUseTeeth::DrawBitmap(long nNumber,CDC *pDC)
{
	long nNum = 0;
	int rare = 1;
	while (nNum < nNumber)
	{
 	//	if(nNum%4==0)
			pDC->SetPixel((int)(m_sCoordinate[nNum].dX * rare), (int)(m_sCoordinate[nNum].dY * rare),RGB(0,0,0));
		nNum++;
	}

}

⌨️ 快捷键说明

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