www.pudn.com > wavelet-vc++6.rar > CS93.cpp


// CS93.cpp : implementation file 
// 
 
#include "stdafx.h" 
#include "wavelet.h" 
#include "MainFrm.h" 
#include "waveletDoc.h" 
#include "waveletView.h" 
#include "CS93.h" 
 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
 
///////////////////////////////////////////////////////////////////////////// 
// CCS93 dialog 
void dis(); 
unsigned long hist[2][2][256],max[2][2]; 
 
CCS93::CCS93(CWnd* pParent /*=NULL*/) 
	: CDialog(CCS93::IDD, pParent) 
{ 
	//{{AFX_DATA_INIT(CCS93) 
	m_filename = _T(""); 
	m_col = 0; 
	m_level = 0; 
	m_row = 0; 
	//}}AFX_DATA_INIT 
} 
 
 
void CCS93::DoDataExchange(CDataExchange* pDX) 
{ 
	CDialog::DoDataExchange(pDX); 
	//{{AFX_DATA_MAP(CCS93) 
	DDX_Text(pDX, IDC_FILENAME, m_filename); 
	DDX_Text(pDX, IDC_IMAGECOL, m_col); 
	DDX_Text(pDX, IDC_IMAGELEVEL, m_level); 
	DDX_Text(pDX, IDC_IMAGEROW, m_row); 
	//}}AFX_DATA_MAP 
} 
 
 
BEGIN_MESSAGE_MAP(CCS93, CDialog) 
	//{{AFX_MSG_MAP(CCS93) 
	ON_BN_CLICKED(IDC_FILELOOK, OnFilelook) 
	//}}AFX_MSG_MAP 
END_MESSAGE_MAP() 
 
///////////////////////////////////////////////////////////////////////////// 
// CCS93 message handlers 
void CCS93::mainprogram() 
{ 
    CFile file; 
	BITMAPINFO  *pBMI=NULL; 
    CFileException fileException; 
    BITMAPFILEHEADER bfh; 
 
	long i1,length; 
	unsigned char* image=NULL; 
    length=(long)m_row*m_col; 
	image=(unsigned char*)malloc((long)m_row*m_col); 
	if(!image) 
	{ 
		AfxMessageBox("Buffer error!"); 
		return; 
	} 
	for(k=0;k<2;k++) 
		for(j=0;j<2;j++) 
		{ 
			max[k][j]=0; 
			for(i=0;i<256;i++)  hist[k][j][i]=0; 
		} 
	if(!file.Open((LPCTSTR)m_filename,CFile::modeRead)) 
	{ 
		AfxMessageBox("File Open error!"); 
		return; 
	} 
	if(file.Read(&bfh,sizeof(bfh))!=sizeof(bfh)) 
	{ 
	    AfxMessageBox("读文件出错......!"); 
		return ; 
	} 
 
 
	if(bfh.bfType!=0x4d42) 
	{ 
		AfxMessageBox("不是BMP文件!"); 
		return ; 
	} 
 
    BITMAPINFOHEADER bih; 
   	if(file.Read(&bih,sizeof(bih))!=sizeof(bih)) 
	{ 
	    AfxMessageBox("读文件出错!"); 
		return; 
	} 
 
     
	if(bih.biBitCount!=24) 
	{ 
		AfxMessageBox("不是真彩色位图文件!"); 
		return ; 
	} 
 
 
	pBMI=(BITMAPINFO*)new char[sizeof(BITMAPINFOHEADER)]; 
	if(!pBMI) 
	{  
		AfxMessageBox("分配内存出错!"); 
		return; 
	} 
 
 
	memcpy(pBMI,&bih,sizeof(BITMAPINFOHEADER)); 
 
	DWORD dataBytes=bfh.bfSize-bfh.bfOffBits; 
	image=(unsigned char* )new char[dataBytes]; 
	if(!image) 
	{	 
		AfxMessageBox("分配内存出错!"); 
		delete pBMI; 
		return; 
 
	} 
 
	for(i=0;i=m_col/2) hist[0][1][k]++; 
			else if(i>=m_row/2 && j=m_row/2 && j>=m_col/2) hist[1][1][k]++; 
		} 
		else if(m_level==2) 
		{ 
			if(i=m_col/4) hist[0][1][k]++; 
			else if(i>=m_row/4 && j=m_row/4 && j>=m_col/4) hist[1][1][k]++; 
		} 
		else if(m_level==3) 
		{ 
			if(i=m_col/8) hist[0][1][k]++; 
			else if(i>=m_row/8 && j=m_row/8 && j>=m_col/8) hist[1][1][k]++; 
		} 
		else AfxMessageBox("Error!"); 
	} 
	} 
	file.Close(); 
	for(i1=0;i1<2;i1++) 
		for(k=0;k<2;k++) 
			for(i=0;i<256;i++)  //get the maximum value of the histogram 
				max[i1][k]=(max[i1][k]GetMainWnd(); 
    CWaveletView* pView=(CWaveletView*)pFrame->GetActiveView(); 
    CDC* dc=pView->GetDC(); 
	dc->MoveTo(60,100); 
	dc->LineTo(60,410); 
	dc->MoveTo(331,400); 
	dc->LineTo(50,400); 
	for(i=1;i<13;i++) 
	{ 
		j=i*20+60; 
		dc->MoveTo(j,400); 
		dc->LineTo(j,407); 
	} 
	dc->MoveTo(60+255,400); 
	dc->LineTo(60+255,405); 
	dc->TextOut(75,415,"20"); 
	dc->TextOut(292,415,"240"); 
	dc->TextOut(173,415,"120"); 
	dc->TextOut(115,415,"60"); 
	dc->TextOut(235,415,"180"); 
 
	CPen pen(PS_SOLID,1,RGB(255,0,0)); 
	oldpen=dc->SelectObject(&pen); 
 
	for(i=0;i<256;i++) 
	{ 
		j=60+i; 
		t=(double)hist[0][0][i]/(double)max[0][0]; 
		k=(int)t*300; 
		dc->MoveTo(j,400); 
		dc->LineTo(j,400-k); 
	} 
    pen.DeleteObject(); 
	CPen pen1(PS_SOLID,1,RGB(0,255,0)); 
	oldpen=dc->SelectObject(&pen1); 
	dc->MoveTo(60,100); 
	dc->LineTo(331,100); 
	dc->LineTo(331,400); 
    pen1.DeleteObject(); 
    dc->DeleteDC(); 
	} 
	else 
	{ 
    CMainFrame* pFrame=(CMainFrame*)AfxGetApp()->GetMainWnd(); 
    CWaveletView* pView=(CWaveletView*)pFrame->GetActiveView(); 
    CDC* dc=pView->GetDC(); 
	    CPen pen2(PS_SOLID,1,RGB(0,255,0)); 
	    oldpen=dc->SelectObject(&pen2); 
		for(r=0;r<2;r++) 
			for(s=0;s<2;s++) 
				dc->Rectangle(5+320*r,6+240*s,5+320*r+270,6+240*s+220); 
			for(i=0;i<13;i++) 
			{ 
				j=i*20+60; 
				dc->MoveTo(5+320*r+j,6+240*s+220); 
				dc->LineTo(j,6+240*s+223); 
			} 
		pen2.DeleteObject(); 
	    CPen pen3(PS_SOLID,1,RGB(0,255,0)); 
	    oldpen=dc->SelectObject(&pen3); 
		for(r=0;r<2;r++) 
			for(s=0;s<2;s++) 
		    	for(i=0;i<256;i++) 
				{ 
                   tt[r][s]=(double)hist[r][s][i]/(double)max[r][s]; 
				   kk[r][s]=(int)(tt[r][s]*220); 
				   dc->MoveTo(5+320*r+i,6+240*s+220); 
				   dc->LineTo(5+320*r+i,6+240*s+220-kk[r][s]); 
				} 
	    pen3.DeleteObject(); 
        dc->DeleteDC(); 
	} 
} 
 
void CCS93::OnFilelook()  
{ 
	static char szFilter[]="BMP文件(*.bmp)|*.bmp||"; 
  	CFileDialog dlg(TRUE,"bmp",NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,szFilter);	 
    if(dlg.DoModal()==IDOK) 
	{ 
 	   m_filename=dlg.GetPathName();  
	}  
	UpdateData(FALSE);		 
}