Pour ne pas devoir réinventer l'eau chaude, l'utilisation du programe DCRAW dcraw.c, logiciel de David Coffin, permet de fabriquer une image TIFF à partir d'un fichier issu d'un appareil reflex numérique.
Le principe est d'appeler le programme avec les options -D pour avoir les données brutes du capteur de l'appareil numérique. L'option -T donne un format tiff et -4 indique que la résolution demandée est 16 buts au lieu des 8.
Le code source étant disponible, nous pouvons l'inclure dans notre programme. Le seul inconvéniant est que le fichier drcaw.c contient une fonction main
qu'il nous faudra renommé pour permettre une bonne compilation.
int convertRAW() { int Sargc; char* Sargv[5]; // Simulation d'un appel à DCRAW Sargv[0]="DCRAW"; Sargv[1]="-D"; Sargv[2]="-T"; Sargv[3]="-4"; Sargv[4]=malloc(sizeof(char)*512); int i; for(i=0;i<LEN_REPERTOIRES;i++) { // Lecture d'un repertoire struct dirent *lecture; DIR *rep; rep = opendir(REPERTOIRES[i]); /* lire les images */ while ((lecture = readdir(rep))) { /* On prend que les fichiers .CR2 */ if (strlen(lecture->d_name) > 4 ) { char *p = lecture->d_name; p = p + strlen(lecture->d_name)-4; if ((strcmp(p, ".CR2")==0)|| (strcmp(p, ".CRW")==0)) { char nRAW[512]; sprintf(nRAW,"%s//%s",REPERTOIRES[i],lecture->d_name); printf("RAW en Tiff : %s\n", nRAW); fflush(stdout); strcpy(Sargv[4],nRAW); // ./dcraw.exe -D -T -4 lights/IMG_1895.CR2 main2(5,Sargv); } } } closedir(rep); }
L'ensemble des répertoires (lights, darks,offsets et flats) est balayé et dcraw est appliqué pour les fichiers CR2 et CRW.