2009-05-21 42 views
1

有人問我如何幫助他們從Web Shots圖像收集文件(.WBC)中提取圖片。我試過XnView,但沒有奏效。我如何在C中做到這一點?如何從C中的WBC文件中提取圖片?

+0

那麼問題是什麼?看起來更像是一個答案,而不是對我的問題。 – lothar 2009-05-21 16:20:39

回答

1

Mike

我砍死在一起,一些代碼來完成這項工作。這裏是。這不是生產質量代碼,所以如果你不理解它,那就不要運行它。

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 

void save_image(const char* filename, FILE* in_fp) 
{ 
    char buf[4096]; 
    size_t read; 
    FILE *fp; 

    fp = fopen(filename, "wb"); 
    if (!fp) { 
     fprintf(stderr, "cannot open file."); 
     exit(1); 
    } 
    do { 
     read = fread(buf,1,sizeof(buf),in_fp); 
     fwrite(buf, 1, read, fp); 
    } while (read); 
    fclose(fp); 
} 

int main(int argc, char* argv[]) 
{ 
    char buf[4096]; 
    unsigned int read, read_tot = 0; 
    FILE *fp; 
    int image_count = 1; 
    char filename[255]; 
    unsigned int i; 

    char pattern[] = "JFIF"; 
    int pi = 0; 

    long int curpos; 
    char pad[50]; 

    char src_filename[] = 
     "C:\\Documents and Settings\\mikeking\\Desktop\\WBC\\" 
     "Custom - CATHYS WEDDING.wbc"; 
    char des_directory[] = "C:\\Documents and Settings\\mikeking\\Desktop\\F\\"; 

    fp = fopen(src_filename, "rb"); 
    if (!fp) { 
     fprintf(stderr, "cannot open file."); 
     exit(1); 
    } 

    do { 
     read = fread(buf,1,sizeof(buf),fp); 

     for(i=0; i<read; i++){ 
     if (buf[i] == pattern[pi]) { 
      pi++; 
      if (pi == sizeof(pattern)) { 
       strcpy(filename, des_directory); 
       itoa(image_count, pad, 10); 
       image_count++; 
       strcat(filename, pad); 
       strcat(filename, ".jpg"); 
       curpos = ftell(fp); 
       fseek(fp,read_tot+i-10,SEEK_SET); 
       save_image(filename,fp); 
       fseek(fp,curpos,SEEK_SET); 
      } 
     } else { 
      pi = 0; 
     } 
     } 
     read_tot += read; 
    } while (read); 

    fclose(fp); 
    return 0; 
}