代码之家  ›  专栏  ›  技术社区  ›  dalelane

如何从C中的WBC文件中提取图片?

  •  1
  • dalelane  · 技术社区  · 7 年前

    1 回复  |  直到 17 年前
        1
  •  1
  •   Steve Willard    9 年前

    从…起 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;
    }
    
    推荐文章