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);
}