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