www.pudn.com > Imagewavelet.rar > ImageView.cpp


// ImageView.cpp : implementation of the CImageView class 
// 
 
#include "stdafx.h" 
#include "Image.h" 
#include "dibapi.h" 
#include "MainFrm.h" 
#include "ImageDoc.h" 
#include "ImageView.h" 
#include "math.h" 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
 
///////////////////////////////////////////////////////////////////////////// 
// CImageView 
 
IMPLEMENT_DYNCREATE(CImageView, CScrollView) 
 
BEGIN_MESSAGE_MAP(CImageView, CScrollView) 
	//{{AFX_MSG_MAP(CImageView) 
	ON_COMMAND(ID_QUFAN, OnQufan) 
	ON_COMMAND(ID_JIANCE, OnJiance) 
	ON_COMMAND(ID_WAVELET, OnWavelet) 
	ON_COMMAND(ID_FFT, OnFft) 
	ON_COMMAND(ID_ONCE, OnOnce) 
	//}}AFX_MSG_MAP 
	// Standard printing commands 
	ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint) 
	ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint) 
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview) 
END_MESSAGE_MAP() 
 
///////////////////////////////////////////////////////////////////////////// 
// CImageView construction/destruction 
 
CImageView::CImageView() 
{ 
	// TODO: add construction code here 
 
} 
 
CImageView::~CImageView() 
{ 
} 
 
BOOL CImageView::PreCreateWindow(CREATESTRUCT& cs) 
{ 
	// TODO: Modify the Window class or styles here by modifying 
	//  the CREATESTRUCT cs 
 
	return CView::PreCreateWindow(cs); 
} 
 
///////////////////////////////////////////////////////////////////////////// 
// CImageView drawing 
 
void CImageView::OnDraw(CDC* pDC) 
{ 
	CImageDoc* pDoc = GetDocument(); 
	ASSERT_VALID(pDoc); 
	if (pDoc->m_hDIB == NULL) 
		return; 
	PaintDIB(pDC->GetSafeHdc(), 
		     m_rcDIB,  
			 pDoc->m_hDIB,  
			 m_rcDIB,  
			 NULL,  
			 SRCCOPY); 
} 
 
///////////////////////////////////////////////////////////////////////////// 
// CImageView printing 
 
BOOL CImageView::OnPreparePrinting(CPrintInfo* pInfo) 
{ 
	// default preparation 
	return DoPreparePrinting(pInfo); 
} 
 
void CImageView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) 
{ 
	// TODO: add extra initialization before printing 
} 
 
void CImageView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/) 
{ 
	// TODO: add cleanup after printing 
} 
 
///////////////////////////////////////////////////////////////////////////// 
// CImageView diagnostics 
 
#ifdef _DEBUG 
void CImageView::AssertValid() const 
{ 
	CView::AssertValid(); 
} 
 
void CImageView::Dump(CDumpContext& dc) const 
{ 
	CView::Dump(dc); 
} 
 
CImageDoc* CImageView::GetDocument() // non-debug version is inline 
{ 
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CImageDoc))); 
	return (CImageDoc*)m_pDocument; 
} 
#endif //_DEBUG 
 
///////////////////////////////////////////////////////////////////////////// 
// CImageView message handlers 
 
void CImageView::OnInitialUpdate()  
{ 
	CScrollView::OnInitialUpdate(); 
    CImageDoc* pDoc=GetDocument(); 
	CSize sizeTotal; 
	if (pDoc->m_hDIB != NULL) 
	{ 
		LPBITMAPINFOHEADER lpDIB = (LPBITMAPINFOHEADER)GlobalLock(pDoc->m_hDIB); 
		m_rcDIB.left =0; 
		m_rcDIB.top = 0; 
		m_rcDIB.right = pDoc->m_Width;//((LPBITMAPINFOHEADER)lpDIB)->biWidth; 
		m_rcDIB.bottom = pDoc->m_Height;//((LPBITMAPINFOHEADER)lpDIB)->biHeight; 
		sizeTotal.cx =pDoc->m_Width;//((LPBITMAPINFOHEADER)lpDIB)->biWidth; 
		sizeTotal.cy =pDoc->m_Height;//((LPBITMAPINFOHEADER)lpDIB)->biHeight; 
		GlobalUnlock(pDoc->m_hDIB); 
	} 
	else 
	{ 
		m_rcDIB.SetRectEmpty(); 
		sizeTotal.cx = sizeTotal.cy = 100; 
	} 
	SetScrollSizes(MM_TEXT, sizeTotal); 
	 
	// TODO: Add your specialized code here and/or call the base class 
	 
} 
void CImageView::ShowDIB(double* dDIB,DWORD Width,DWORD Height,DWORD g_Width,DWORD g_Height, 
						 HDIB hDIB,unsigned char is_ffwt,DWORD offset) 
{ 
double* m_DIB; 
  double max  = 512.*(double)(g_Height/Height); 
  double min  = 0.; 
  DWORD  i,j; 
  m_DIB       = new double [Width*Height]; 
  LPBYTE lpby = new unsigned char [Width*Height]; 
  double* lptemp      = dDIB; 
  double* lp          = m_DIB; 
  LPBYTE lpDIBSrc     = (LPBYTE) GlobalLock(hDIB); 
  LPBYTE lpbOldBits   = FindDIBBits(lpDIBSrc);  
   
  for(i=0;i*lptemp&&*lptemp>(-102400000.0)) 
		  { 
			min=*lptemp; 
		  } 
		  lptemp++; 
	  } 
  } 
  if(is_ffwt!=1) 
  { 
    double dis      = max-min; 
    double dis_rate = dis/255.; 
    lptemp          = m_DIB; 
    for(i=0;iorgpic.col; 
	m_nysize=pDoc->orgpic.row; 
	m_pImage_in=pDoc->orgpic.p; 
	m_pImage_out=new unsigned char *[m_nysize]; 
	for (int i=0;im_DIBData=new double[m_nysize*m_nxsize]; 
	for(int k=0;km_DIBData[(m_nysize-1-k)*m_nxsize+j]=m_pImage_out[k][j]; 
	} 
 
	ShowDIB(pDoc->m_DIBData,m_nxsize,m_nysize,m_nxsize,m_nysize,pDoc->m_hDIB,1,0); 
	 
} 
 
void CImageView::OnJiance()  
{ 
	CImageDoc* pDoc=GetDocument(); 
	m_nxsize=pDoc->orgpic.col; 
	m_nysize=pDoc->orgpic.row; 
	m_pImage_in=pDoc->orgpic.p; 
	m_pImage_out=new unsigned char *[m_nysize]; 
	for (int i=0;im_DIBData=new double[m_nysize*m_nxsize]; 
	for(int k=0;km_DIBData[(m_nysize-1-k)*m_nxsize+j]=m_pImage_out[k][j]; 
	} 
 
	ShowDIB(pDoc->m_DIBData,m_nxsize,m_nysize,m_nxsize,m_nysize,pDoc->m_hDIB,1,0); 
	 
} 
 
void CImageView::OnWavelet()  
{ 
	CImageDoc* pDoc=GetDocument(); 
	m_nxsize=pDoc->orgpic.col; 
	m_nysize=pDoc->orgpic.row; 
	m_pImage_in=pDoc->orgpic.p; 
	m_pImage_out=new unsigned char *[m_nysize]; 
	for (int i=0;im_DIBData=new double[m_nysize*m_nxsize]; 
	for(int k=0;km_DIBData[(m_nysize-1-k)*m_nxsize+j]=m_pImage_out[k][j]; 
	} 
 
	ShowDIB(pDoc->m_DIBData,m_nxsize,m_nysize,m_nxsize,m_nysize,pDoc->m_hDIB,1,0); 
	 
} 
 
void CImageView::OnFft()  
{ 
	CImageDoc* pDoc=GetDocument(); 
	m_nxsize=pDoc->orgpic.col; 
	m_nysize=pDoc->orgpic.row; 
	m_pImage_in=pDoc->orgpic.p; 
	m_pImage_out=new unsigned char *[m_nysize]; 
	for (int i=0;im_DIBData=new double[m_nysize*m_nxsize]; 
	for(int k=0;km_DIBData[(m_nysize-1-k)*m_nxsize+j]=m_pImage_out[k][j]; 
	} 
 
	ShowDIB(pDoc->m_DIBData,m_nxsize,m_nysize,m_nxsize,m_nysize,pDoc->m_hDIB,1,0); 
	 
} 
 
void CImageView::OnOnce()  
{ 
	CImageDoc* pDoc=GetDocument(); 
	m_nxsize=pDoc->orgpic.col; 
	m_nysize=pDoc->orgpic.row; 
	m_pImage_in=pDoc->orgpic.p; 
	m_pImage_out=new unsigned char *[m_nysize]; 
	for (int i=0;im_DIBData=new double[m_nysize*m_nxsize]; 
	for(int k=0;km_DIBData[(m_nysize-1-k)*m_nxsize+j]=m_pImage_out[k][j]; 
	} 
 
	ShowDIB(pDoc->m_DIBData,m_nxsize,m_nysize,m_nxsize,m_nysize,pDoc->m_hDIB,1,0); 
	 
}