2011-04-22 41 views
0

我开发了一个基于huffman算法的C语言程序。在图像文件上实现huffman算法

现在我想用相同算法的图像文件的工作(上一个程序可以压缩.txt文件)...

我怎么能输入与C程序的图像文件,并使用该算法进行压缩..

void freq() 
{ 
    int i=0,j,k,f,n=0; 
    char ch; 

    clrscr(); 

    printf("\nEnter path of the text file:"); 
    fflush(stdin); 
    gets(path); 
    f1=fopen(path,"rb"); 
    if(f1==NULL) 
    { 
     printf("cant open %s",path); 
     getch(); 
     exit(1); 
    } 
    while(1) 
    { 
     f=0; 
     ch=fgetc(f1); 
     if(ch==EOF) 
      break; 
     for(j=0;j<n;j++) 
     { 
      if(ch==arr[j]) 
       f=1; 
     } 
     if(f==1) 
      continue; 
     else 
     { 
      arr[i]=ch; 
      ptr[i][0]=arr[i]; 
      ptr[i][1]='\0'; 
      i++; 
     } 
     n++; 
    } 
    arr[i]='\0'; 
    noc=i-1; 
} 
+0

向我们显示您的代码。也许我们可以看看它并提出建议。 – Oded 2011-04-22 07:20:09

+4

重命名您的图像文件以具有'.TXT'扩展名。完成后,您现在可以使用基于TXT的霍夫曼编码算法! – 2011-04-22 07:23:35

+0

代码太长..我只是上传输入节void freq() { int i = 0,j,k,f,n = 0; char ch; // FILE * f1,* f2; clrscr(); printf(“\ n输入文本文件的路径:”); fflush(stdin); fflush(stdin); gets(path); f1 = fopen(path,“rb”);如果(f1 == NULL) printf(“can not open%s”,path); getch(); exit(1); } while(1) { f = 0; ch = fgetc(f1); if(ch == EOF) break; (j = 0; j Sujoy 2011-04-22 07:40:54

回答

1

由于Cosmin Prund已在他的评论中声明:“将您的图像文件重命名为.txt”。现在,你当然不必这么做,他的意思是:霍夫曼编码算法不知道它得到什么样的输入,它不关心。

因此,不要读取.txt文件,只需读取图像文件并将其交给Huffman算法即可。对于算法,它只是位,无所谓它是英语或克林贡或BMP或...

当然,使用霍夫曼编码对图像文件进行压缩,这可能不是最好的主意。有一个原因是有诸如JPG格式的文件格式。他们利用这样的事实,即人眼对图像上的某些有损变换不敏感,并使用它来移除该信息,因此他们不得不编码较少的数据。霍夫曼编码不能做到这一点,因为它是通用的和无损的。

[编辑]我没有通过你发布的代码了,但我也注意到乍一看错误:fgetc返回int,而不是char正如它的名字可能会导致你相信。所以最好改变ch的定义。

+1

...除了该文件必须以二进制模式打开才能使程序可移植。 – 2011-04-22 08:38:02

+1

好的,但如果你看OP的代码(在fopen调用中的“rb”标志),情况已经如此。 – Darhuuk 2011-04-22 09:30:04