www.pudn.com > SharedScreen.rar > LZWCoder.cpp


// LZWCoder.cpp: implementation of the CLZWCoder class. 
// 
////////////////////////////////////////////////////////////////////// 
 
#include "stdafx.h" 
#include "SharedScreen.h" 
#include "LZWCoder.h" 
#include "lzwfile.h" 
#include "lzwtable.h" 
#include "lzwcode.h" 
#ifdef _DEBUG 
#undef THIS_FILE 
static char THIS_FILE[]=__FILE__; 
#define new DEBUG_NEW 
#endif 
 
////////////////////////////////////////////////////////////////////// 
// Construction/Destruction 
////////////////////////////////////////////////////////////////////// 
 
CLZWCoder::CLZWCoder() 
{ 
 
} 
 
CLZWCoder::~CLZWCoder() 
{ 
 
} 
 
BOOL CLZWCoder::Encode(LPSTR lpSrc, int nSrcLen, LPSTR& lpDst, int *pnDstLen) 
{ 
	BOOL bResult; 
	CMemFile InFile; 
	CMemFile OutFile; 
	InFile.SetLength(nSrcLen); 
	InFile.WriteHuge(lpSrc,nSrcLen); 
	InFile.SeekToBegin(); 
	//InFile.Attach((LPBYTE)lpSrc,nSrcLen,1024); 
	OutFile.Attach((LPBYTE)lpDst,*pnDstLen,1024); 
	bResult = LZWEncodeFile((CFile*)&InFile,(CFile*)&OutFile); 
	if(!bResult) 
	{ 
		*pnDstLen = 0; 
		return false; 
	} 
	*pnDstLen = OutFile.GetLength(); 
	lpDst =(LPSTR) OutFile.Detach(); 
	return TRUE; 
} 
 
BOOL CLZWCoder::Decode(LPSTR lpSrc, int nSrcLen, LPSTR& lpDst, int *pnDstLen) 
{ 
	BOOL bResult; 
	CMemFile InFile(nSrcLen); 
	CMemFile OutFile; 
	//InFile.SetLength(nSrcLen); 
	InFile.Write(lpSrc,nSrcLen); 
	InFile.SeekToBegin(); 
	//InFile.Attach((LPBYTE)lpSrc,nSrcLen,1024); 
	OutFile.Attach((LPBYTE)lpDst,*pnDstLen,1024); 
	OutFile.SeekToBegin(); 
	bResult = LZWDecodeFileOnPosition((CFile*)&InFile,(CFile*)&OutFile,0); 
	if(!bResult) 
	{ 
		*pnDstLen = 0; 
		return false; 
	} 
	*pnDstLen = OutFile.GetLength(); 
	lpDst = (LPSTR)OutFile.Detach(); 
	 
	return TRUE; 
} 
 
BOOL CLZWCoder::Encode(CFile *pInFile, CFile *pOutFile) 
{ 
	BOOL bResult; 
	pInFile->SeekToBegin(); 
	bResult = LZWEncodeFile(pInFile,pOutFile); 
	if(!bResult) 
	{ 
		return false; 
	} 
	return TRUE; 
} 
 
BOOL CLZWCoder::Decode(CFile *pInFile, CFile *pOutFile) 
{ 
	BOOL bResult; 
	pInFile->SeekToBegin(); 
	bResult = LZWDecodeFileOnPosition(pInFile,pOutFile); 
	if(!bResult) 
	{ 
		return false; 
	} 
	return TRUE; 
}