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