www.pudn.com > backmode824.rar > Memory.cpp
// Memory.cpp: implementation of the CMemory class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "backmodel.h"
#include "Memory.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CMemory::CMemory()
{
m_hMem=NULL;
m_lpMapHeader=NULL;
m_lpImage=NULL;
m_lpBackImage=NULL;
m_lpHMap=NULL;
m_lpDMap=NULL;
m_lpSMap=NULL;
m_lpNewEdgeChain=NULL;
m_lpOldEdgeChain=NULL;
m_bInitialized=FALSE;
}
CMemory::~CMemory()
{
if(m_hMem)
{
GlobalUnlock(m_hMem);
GlobalFree(m_hMem);
}
}
BOOL CMemory::InitMem()
{
DWORD memsize;
DWORD mapsize,halfsize;
if(m_hMem)
{
GlobalUnlock(m_hMem);
GlobalFree(m_hMem);
}
//memsize=1024*1024*14; //原来×12 现在增加一个lpmask
memsize=1024*1024*16;//再增加一个lpGrayMask
mapsize=(DWORD)((long)(1024.0*1024.0*2));//最大不超过800*600
halfsize=(DWORD)((long)(1024.0*1024.0*0.5));
m_hMem=(HANDLE)GlobalAlloc(GPTR,memsize);
if(m_hMem==NULL) return FALSE;
m_lpMapHeader=(LPBITMAPINFOHEADER)GlobalLock(m_hMem);
m_lpImage=(LPBYTE)((DWORD)m_lpMapHeader+5120);
m_lpBackImage=(LPBYTE)((DWORD)m_lpImage+mapsize);
m_lpMask=(LPBYTE)((DWORD)m_lpBackImage+mapsize); //new add
m_lpGrayMask=(LPBYTE)((DWORD)m_lpMask+mapsize); //new add809
m_lpDMap=(LPBYTE)((DWORD)m_lpBackImage+mapsize);
m_lpNewEdgeChain=(LPBYTE)((DWORD)m_lpDMap+mapsize);
m_lpOldEdgeChain=(LPBYTE)((DWORD)m_lpNewEdgeChain+mapsize);
m_lpSMap=(LPBYTE)((DWORD)m_lpOldEdgeChain+mapsize);
m_lpHMap=(LPBYTE)((DWORD)m_lpSMap+halfsize);
m_bInitialized=TRUE;
return TRUE;
}
void CMemory::FreeMem()
{
if(m_hMem)
{
GlobalUnlock(m_hMem);
GlobalFree(m_hMem);
m_hMem=NULL;
m_lpMapHeader=NULL;
m_lpImage=NULL;
m_lpBackImage=NULL;
m_lpMask=NULL;
m_lpGrayMask=NULL;
m_lpHMap=NULL;
m_lpDMap=NULL;
m_lpSMap=NULL;
m_lpNewEdgeChain=NULL;
m_lpOldEdgeChain=NULL;
}
m_bInitialized=FALSE;
return ;
}