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

📄 dib.cpp

📁 BP神经网络解决异或问题
💻 CPP
字号:
// Dib.cpp: implementation of the CDib class.
//
//////////////////////////////////////////////////////////////////////

//#include "stdafx.h"
//#include "VcPrj.h"
#include "Dib.h"

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

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

CDib::CDib()
{
	memset(pDIBDeal,0,sizeof(BYTE)*640*480);
	memset(pDIBData,0,sizeof(BYTE)*640*480);
}

CDib::~CDib()
{
}

BOOL CDib::LoadFromFile(LPCTSTR bmpfile)
{
    CFile myfile;
	CFileException fileException;
	BITMAPINFO bif;
	BITMAPFILEHEADER bfh;
	BITMAPINFOHEADER bih;
	DWORD dataBytes;

	if(!myfile.Open(bmpfile,CFile::modeReadWrite,&fileException)){
       	TRACE("文件无法打开! %s,error=%u\n",bmpfile,fileException.m_cause);
	    return false;
	}	
	myfile.Seek(0,CFile::begin);
   
	if(myfile.Read(&bfh,sizeof(bfh))!=sizeof(bfh)){
		AfxMessageBox("读取文件出错!");
		return false;
	}

	if(bfh.bfType!=0x4d42){ // 'BM'
		AfxMessageBox("不是一个位图文件!");
		return false;
	}

	if(myfile.Read(&bih,sizeof(bih))!=sizeof(bih)){
		AfxMessageBox("读取文件出错!");
		return false ;
	}
		
	if(!(bih.biBitCount != 1 ||bih.biBitCount != 8)){ // ''
		TRACE("不是灰度图像!");
		return false;
	}
	if(bih.biCompression!=0 ){
		AfxMessageBox("是压缩图像");
		return FALSE;
	}
	if(bih.biHeight * bih.biWidth > 640*480){
		AfxMessageBox("长度或宽度不满足要求!");
		return FALSE;
	}
    myfile.Seek(sizeof(bfh),CFile::begin);

	if(myfile.Read(&bif,sizeof(bif))!=sizeof(bif)){
		AfxMessageBox("读取文件出错!");
		return false;
	}

	memcpy(&m_pBMI,&bif,sizeof(BITMAPINFO));

    dataBytes=bfh.bfSize-bfh.bfOffBits;

	myfile.Seek(0,CFile::begin);
	myfile.Seek(bfh.bfOffBits,CFile::begin);
         
	if(myfile.Read(pDIBData,dataBytes)!=dataBytes){
	   AfxMessageBox("读取位图文件出错 !");
	   return false;
	}
    myfile.Close();

//    m_pDIBData = pDIBData;
	memcpy(pDIBDeal,pDIBData,sizeof(pDIBData));

	return TRUE;
}

int CDib::GetDibWidth(void)
{
	return m_pBMI.bmiHeader.biWidth;
}

int CDib::GetDibHeight(void)
{
	return m_pBMI.bmiHeader.biHeight;
}

int CDib::WriteToFile(LPCTSTR lpfilename)
{
	BITMAPFILEHEADER bmphdr ;
	RGBQUAD rgb[256];
	FILE * fi;
	int colorused ;

	for(int i = 0; i < 256; i++){
		rgb[i].rgbBlue = i;
		rgb[i].rgbGreen = i;
		rgb[i].rgbRed = i;
		rgb[i].rgbReserved = 0;
	}
    colorused = 256 ;
    if( m_pBMI.bmiHeader.biBitCount != 8 ){
		return FALSE;
	}
	int bpl = ((m_pBMI.bmiHeader.biWidth * m_pBMI.bmiHeader.biBitCount + 31) & ~31) >> 3; 
    bmphdr.bfOffBits=sizeof(BITMAPFILEHEADER)+m_pBMI.bmiHeader.biSize+colorused*sizeof(RGBQUAD);
	bmphdr.bfReserved1=0;
	bmphdr.bfReserved2=0;
	bmphdr.bfSize=bmphdr.bfOffBits+bpl*m_pBMI.bmiHeader.biHeight;
	bmphdr.bfType=19778;
    fi=fopen(lpfilename, "wb");
	if (fi==NULL) return FALSE;
	fwrite(&bmphdr,sizeof(BITMAPFILEHEADER),1,fi);
	fwrite(&m_pBMI.bmiHeader,sizeof(BITMAPINFOHEADER), 1, fi);
	fwrite(rgb,colorused*sizeof(RGBQUAD),1,fi);
	fwrite(pDIBData,1,bpl*abs(m_pBMI.bmiHeader.biHeight),fi);
	fclose(fi);
	return TRUE;
}

⌨️ 快捷键说明

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