2009-05-21 2 views
1

Кто-то просит меня помочь им извлечь их изображения из файла коллекции изображений веб-снимков (.WBC). Я попробовал XnView, но это не сработало. Как я могу сделать это в C?Как я могу извлечь изображения из файла WBC в C?

+0

Так в чем вопрос? Вы больше похожи на ответ, чем на вопрос. – lothar

+0

Я ответил на вопрос. Надеюсь, если кто-то «разорит» вопрос, тогда они получат этот ответ. – Mike

+0

@Mike - Я переместил ответ. Если вы скопируете его на свой ответ, я удалю свою. –

ответ

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; 
} 
Смежные вопросы