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