2011-04-22 5 views
0

나는 허프만 알고리즘을 기반으로하는 C 언어로 프로그램을 개발했습니다.이미지 파일에 허프만 알고리즘을 적용

지금 내가 입력 이미지 C 프로그램 파일이 압축 알고리즘을 사용할 수 있습니다 ... 어떻게

를 (이전 프로그램이 .txt 파일을 압축 할 수 있습니다) 이미지 파일과 동일한 알고리즘 작업 할 ..

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

+4

이미지 파일의 이름을'.TXT' 확장자로 변경하십시오. 이제 TXT 기반 허프만 (Huffman) 인코딩 알고리즘을 사용할 수 있습니다! –

+0

코드가 너무 깁니다 .. 그냥 입력 섹션을 업로드하십시오 void freq() { int i = 0, j, k, f, n = 0; char ch; // FILE * f1, * f2; clrscr(); printf ("\ n 텍스트 파일의 경로를 입력하십시오."); fflush (stdin); gets (path); f1 = fopen (경로, "rb"); if (f1 == NULL) { printf ("cant open % s", 경로); getch(); exit (1); (1) { f = 0; ch = fgetc (f1); if (ch == EOF) 중단; (ch == arr [j]) f = 1 인 경우, for (j = 0; j Sujoy

답변

1

Cosmin Prund는 이미 "이미지 파일의 이름을 .txt"로 변경했습니다. 자, 물론 당신은 그것을 할 필요가 없습니다, 그가 의미하는 바는 다음과 같습니다. 허프만 인코딩 알고리즘은 어떤 종류의 입력이든 상관하지 않습니다.

.txt 파일을 읽는 대신 이미지 파일을 읽고이를 허프만 알고리즘으로 전달하십시오. 알고리즘은 모두 비트 일 뿐이므로 영어 또는 클링 온 또는 BMP 또는 ... 중요하지 않습니다.

물론 이미지 파일을 압축하기 위해 허프만 인코딩을 사용하는 것이 가장 좋은 방법은 아닙니다. JPG와 같은 파일 형식이있는 이유가 있습니다. 그들은 인간의 눈이 이미지의 특정 손실 변환에 둔감하다는 사실을 이용하여이 정보를 제거하여 더 적은 데이터를 인코딩해야합니다. 허프만 인코딩은 일반적이고 무손실이기 때문에 그렇게 할 수 없습니다.

[편집] 난 당신이 게시 코드를 통과하지 않은,하지만 난 첫눈에 오류가 발견했다 : 그 이름이 당신에게 믿게 할 우려가 있으므로 int 아닌 char을 반환 fgetc을. 따라서 ch의 정의를 더 잘 변경하십시오.

+1

... 프로그램을 이식 할 수 있도록 파일을 이진 모드로 열어야합니다. –

+1

그렇습니다.하지만 OP의 코드 ("fopen"호출에서 "rb"플래그)를 보면 이미 그럴 것입니다. – Darhuuk