pcx的压缩算法请教
会解压,不会压缩了,求方法
程序代码:
//小于c1的直接输出,大于的就减去c1,得到的就是复制的字节数,后面跟着的是回退量
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
void main()
{
FILE *fa,*fb;
if((fa=fopen("1.GRC","rb"))==NULL)
{printf("cannot open file A\n");exit(0);}
if((fb=fopen("0.bin","wb+"))==NULL)
{printf("cannot open file C\n");exit(0);}
unsigned char j[65];
unsigned char ah,bh;
while (!feof(fa))
{
ah=fgetc(fa);
bh=fgetc(fa);
/********ah小于c1,bh小于c1******/
if (ah<0xc1 && bh<0xc1)
{if (!feof(fa))
{fputc(ah,fb);
fputc(bh,fb);}
}
/***********ah小于c1,bh等于c1************/
else if (ah<0xc1 && bh==0xc1)
{if (!feof(fa))
{ fputc(ah,fb);
ah=fgetc(fa);
fputc(ah,fb);}
}
/**************ah小于c1,bh大于c1***********/
else if (ah<0xc1 && bh>0xc1)
{
if (!feof(fa))
{ fputc(ah,fb);
ah=fgetc(fa);
fseek(fb,-ah,1);
fread(&j,1,bh-0xC0,fb);
fseek(fb,0,2);
fwrite(&j,1,bh-0xC0,fb);
}
}
/************ah等于c1**************/
else if (ah==0xc1)
{if (!feof(fa))
{fputc(bh,fb);}}
/******************ah大于c1*******************/
else if (ah>0xc1)
{
if (!feof(fa))
{ fseek(fb,-bh,1);
fread(&j,1,ah-0xC0,fb);
fseek(fb,0,2);
fwrite(&j,1,ah-0xC0,fb);
}
}
}
fclose(fa);
fclose(fb);
}
压缩的没概念,希望大大指点一下,谢谢[ 本帖最后由 kof888 于 2009-9-4 10:53 编辑 ]








