rle.cpp

来自「RLE8压缩和解压缩算法 用VS2005开发」· C++ 代码 · 共 61 行

CPP
61
字号
#define DLL_PhiL_Cheng_EXPORTS
#include "RLE.h"


DWORD WINAPI EnCode_RLE(const HANDLE pSour,HANDLE pDest,DWORD SourLen)
{
	register DWORD i,j,k;
	DWORD at=0;
	const LPBYTE p=(LPBYTE) pSour;
	LPBYTE pW=(LPBYTE) pDest;
	BYTE Begin;

	if (!SourLen) return 0;
	for (i=0;i<SourLen;i++)
	{
		Begin=p[i];
		for (j=i+1,k=0 ; k<62 &&j<SourLen; j++,k++)
		{
			if (Begin!=p[j]) break;
		}
		if (k) 
		{
			i+=k;
			pW[at++]=(BYTE)(0xc1+k);
			pW[at++]=Begin;
		}
		else
		{
			if (Begin>=0xc1)
			{
				pW[at++]=0xc1;
				pW[at++]=Begin;
			}
			else pW[at++]=Begin;
		}
		if (at>=SourLen) return 0;
	}
	return at;
}

DWORD WINAPI DeCode_RLE(const HANDLE pSour,HANDLE pDest,DWORD SourLen)
{
	register DWORD i,j;
	DWORD k,at=0;
	const LPBYTE p=(LPBYTE) pSour;
	LPBYTE pW=(LPBYTE) pDest;
	BYTE Begin;
	if (!SourLen) return 0;
	for (i=0;i<SourLen;i++)
	{
		Begin=p[i];
		if (Begin>=0xc1)
		{
			if (++i>=SourLen) return 0;
			k=Begin-0xc0;
			for (j=0;j<k;j++) pW[at++]=p[i];
		}
		else pW[at++]=Begin;
	}
	return at;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?