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 编辑 ]