常用压缩算法源代码


几种常用的压缩算法本程序包含以下功能:1、 Arithmetic coding编解码2、 Huffman coding编解码3、 LZ77 coding编解码4、 LZ78 coding 编解码5、 LZW 编解码6、 RLE 编解码7、 DCT 编解码8、 Furie transform
资源截图
代码片段和文件信息
#include “Codec/Huffman.h“
#include “Codec/LZ77.h“
#include “Codec/LZ78.h“
#include “Codec/LZW.h“
#include “Codec/Arithmetic.h“
#include “Codec/RLE.h“
#include “Generic.h“  

#include “Fatal/Fatal.h“  
#include 
#include 
#include 
#include      
#include 

#define BLOCK_SIZE 0x10000
#define SIGNATURE “CODR“

DWORD block_size;

void Encode(FILE *s FILE *t char *sequence)   
{
int i;
long slen tlen scount length compressed = 0;
BYTE *source *target;
BYTE *signature = (BYTE*)SIGNATURE; 
compressed += fwrite(signature 1 strlen((char*)signature) t);
compressed += fwrite(&block_size 1 sizeof(DWORD) t);
fseek(s 0 SEEK_END);
length = ftell(s);
fseek(s 0 SEEK_SET);
for (scount = 0; scount < length; scount += block_size)
{
source = new BYTE[block_size];
slen = fread(source 1 block_size s);
if (!slen)
break;
for (i = 0; sequence[i]; i++)
switch(tolower(sequence[i]))
{
case ‘a‘:
{
printf(“Encoding Arithmetic source size = %4ld
“ slen);
TGeneric *ar = new TGeneric;
tlen = ar->GetMaxEncoded(slen);
target = new BYTE[tlen+1];
ar->Encode(target+1 tlen source slen);
if (tlen)
{
target[0] = ‘a‘;
delete source;
source = target;
slen = tlen+1;
} else
{
delete target;
target = new BYTE[slen+1];
target[0] = 0;
memcpy(target+1 source slen);
delete source;
source = target;
slen++;
}
delete ar;
}
break;
case ‘h‘:
{
printf(“Encoding Huffman source size = %4ld
“ slen);
TGeneric *huf = new TGeneric;
tlen = huf->GetMaxEncoded(slen);
target = new BYTE[tlen+1];
huf->Encode(target+1 tlen source slen);
if (tlen)
{
target[0] = ‘h‘;
delete source;
source = target;
slen = tlen+1;
} else
{
delete target;
target = new BYTE[slen+1];
target[0] = 0;
memcpy(target+1 source slen);
delete source;
source = target;
slen++;
}
delete huf;
}
break;
case ‘7‘:
{
printf(“Encoding LZ77 source size = %4ld
“ slen);
TGeneric *lz = new TGeneric;
tlen = lz->GetMaxEncoded(slen);
target = new BYTE[tlen+1];
lz->Encode(target+1 tlen source slen);
if (tlen)
{
target[0] = ‘7‘;
delete source;
source = target;
slen = tlen+1;
} else
{
delete target;
target = new BYTE[slen+1];
target[0] = 0;
memcpy(target+1 source slen);
delete source;
source = target;
slen++;
}
delete lz;
}
break;
case ‘8‘:
{
printf(“Encoding LZ78 source size = %4ld
“ slen);
TGeneric *lz = new TGeneric;
tlen = lz->GetMaxEncoded(slen);
target = new BYTE[tlen+1];
lz->Encode(target+1 tlen source slen);
if (tlen)
{
target[0] = ‘8‘;
delete source;
source = target;
slen = tlen+1

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       5466  2005-09-02 16:15  CompressionCoder.dsp

     文件        533  2005-09-02 15:51  CompressionCoder.dsw

     文件     156672  2006-11-27 16:43  CompressionCoder.ncb

     文件       2235  2006-11-14 18:02  CompressionCoder.plg

     文件        606  2004-02-18 23:05  CompressionGeneric.h

     文件        357  2004-04-08 21:12  Compressionmakefile

     文件        152  2006-11-16 13:47  Compression
eadme.txt

     文件        167  2005-09-04 11:31  Compression程序说明.txt

     文件      10644  2006-11-10 18:28  Compressionmain.cpp

     文件     262144  2006-11-26 19:20  Compressionlena.raw

     文件     250461  2006-11-27 17:11  Compressionlena_e.raw

     文件     263222  2006-11-26 19:24  Compressionlena.bmp

     文件     251648  2006-11-26 19:23  Compressionlena_e.bmp

     文件     427520  2006-11-27 16:43  CompressionCoder.opt

    ..A.SH.      9728  2007-07-02 10:46  CompressionThumbs.db

     文件      59623  2004-04-08 20:47  Compressionincoder

     文件       5576  2004-02-18 23:05  CompressionCodecArithmetic.cpp

     文件       1639  2004-02-18 23:05  CompressionCodecArithmetic.h

     文件        206  2004-02-18 23:05  CompressionCodecGendef.h

     文件      10256  2004-04-08 21:12  CompressionCodecHuffman.cpp

     文件       1526  2004-02-18 23:05  CompressionCodecHuffman.h

     文件       3094  2004-02-28 00:00  CompressionCodecLZ77.cpp

     文件        484  2004-02-18 23:05  CompressionCodecLZ77.h

     文件       4783  2004-04-08 21:12  CompressionCodecLZ78.cpp

     文件       1407  2004-02-18 23:05  CompressionCodecLZ78.h

     文件       5107  2004-04-08 21:12  CompressionCodecLZW.cpp

     文件       1463  2004-02-18 23:05  CompressionCodecLZW.h

     文件       6685  2004-02-18 23:05  CompressionCodec
edblack.t

     文件       1703  2004-02-18 23:05  CompressionCodecRLE.cpp

     文件        337  2004-02-18 23:05  CompressionCodecRLE.h

............此处省略45个文件信息

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。

发表评论

评论列表(条)