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