rendered paste body/* * Lit le fichier de configuration ("SIZE.txt") pour connaitre les paramètres des volumes */void sequence::lireFichierConfig (string path, string fichierConfig){ string tmp = path + fichierConfig; cout << "[+] Lecture du fichier de configuration : " << fichierConfig << endl; string ligne; largeur = hauteur = startImg = espace = nbrImg = -1; nomImg = ""; ifstream fichier(tmp.c_str(), ifstream::in); while (getline(fichier, ligne)) { unsigned int pos = ligne.find(".X",0); if (pos == ligne.length()-2) nomImg = ligne.substr(0, pos+1); else if (ligne.substr(0, 12) == "Image Type: ") { ligne = ligne.substr(12); if (ligne == "8-bit Unsigned") nbrBytes = CODAGE_8_BITS_UNSIGNED; if (ligne == "16-bit Unsigned") nbrBytes = CODAGE_16_BITS_UNSIGNED; else nbrBytes = CODAGE_UNDEFINED; } else if (ligne.substr(0, 7) == "Width: ") { istringstream str2int(ligne.substr(7)); str2int >> largeur; } else if (ligne.substr(0, 8) == "Height: ") { istringstream str2int(ligne.substr(8)); str2int >> hauteur; } else if (ligne.substr(0, 23) == "Offset to First Image: ") { ligne = ligne.substr(23); pos = ligne.find(" ",0); istringstream str2int(ligne.substr(0,pos)); str2int >> startImg; } else if (ligne.substr(0, 18) == "Number of Images: ") { istringstream str2int(ligne.substr(18)); str2int >> nbrImg; } else if (ligne.substr(0, 20) == "Gap Between Images: ") { ligne = ligne.substr(20); pos = ligne.find(" ",0); istringstream str2int(ligne.substr(0,pos)); str2int >> espace; } } fichier.close(); cout << "[+] Informations lues :" << endl; cout << " nom des volumes : " << nomImg << endl; cout << " largeur : " << largeur << endl; cout << " hauteur : " << hauteur << endl; cout << " nbr d'octet : " << nbrBytes << endl; cout << " offset de depart : " << startImg << endl; cout << " nombre d'image : " << nbrImg << endl; cout << " espace entre image : " << espace << endl; cout << "[+] Lecture du fichier de configuration terminee." << endl; chemin = path; cout << "[+] Comptage du nombre de fichier RAW disponible." << endl; int t = 0; do { if (fichier.is_open()) fichier.close(); t++; stringstream out; out << t; ligne = chemin+nomImg+out.str(); fichier.open(ligne.c_str(),ifstream::in); } while (fichier.is_open()); tMax = t - 1; cout << "[+] " << tMax << " fichiers RAW." << endl; state = 1;}void volume::charger (const char *fichierImg, int *pos){ if (nbrBytes == CODAGE_UNDEFINED) { cout << "[-] Impossible de charges les images, type de données inconnu.\n"; return; } ifstream fichierRAW (fichierImg, ios::in | ios::binary); if (!fichierRAW.is_open()) cout << "[-] volume::charger > Impossible d'ouvrir le fichier " << fichierImg << endl; else { /* on se positionne au début de la premiere image */ fichierRAW.seekg(startImage, ios::beg); /* pour toutes les images */ for (int i=0; i!=nbr; i++) { /* on lit à partir du fichier */ for (int j=0; j<hauteur; j++) { for (int k=0; k<largeur; k++) { int val = 0; /* valeur du pixel en (j,k) */ for (int l=0; l<nbrBytes; l++) { if (!fichierRAW.eof()) val += val*255 + (int)fichierRAW.get(); else { cout << "[-] volume::charger > Fichier imcomplet.\n"; exit(-1); } } setValeurPixel(i,k,hauteur-j-1,val); if (val < (int)valeurMin[i]) valeurMin[i] = val; if (val > (int)valeurMax[i]) valeurMax[i] = val; } } /* incrémentation du compteur pour l'affichage */ if (pos != NULL) (*pos)++; /* on se décale pour se placer au début de l'image suivante */ fichierRAW.seekg(espace, ios::cur); } fichierRAW.close(); }}void sequence::sauvegarderFichierConfig (string path, string fichierConfig, string fichierImg){ string tmp = path + fichierConfig; cout << "[+] Sauvegarde du fichier de configuration : " << fichierConfig << endl; string ligne; ofstream fichier(tmp.c_str(), ifstream::out); fichier << fichierImg << ".X\n\n"; fichier << "Image Type: "; if (nbrBytes == CODAGE_8_BITS_UNSIGNED) fichier << "8-bit Unsigned\n"; else if (nbrBytes == CODAGE_16_BITS_UNSIGNED) fichier << "16-bit Unsigned\n"; else fichier << "erreur\n"; fichier << "Width: " << largeur << " pixels\n"; fichier << "Height: " << hauteur << " pixels\n"; fichier << "Offset to First Image: " << startImg << " bytes\n"; fichier << "Number of Images: " << nbrImg << "\n"; fichier << "Gap Between Images: " << espace << " bytes\n\n"; fichier << "White is Zero\n"; fichier << "Little-Endian Byte Order\n"; fichier << "Open All Files in Folder\n"; fichier.close();}void volume::sauvegarder (const char *fichierImg, int *pos){ ofstream fichierRAW (fichierImg, ios::out); if (!fichierRAW.is_open()) cout << "[-] volume::charger > Impossible d'ouvrir le fichier " << fichierImg << endl; else { for (int i=0; i!=startImage; i++) fichierRAW << " "; /* pour toutes les images */ for (int i=0; i!=nbr; i++) { /* on lit à partir du fichier */ for (int j=0; j<hauteur; j++) { for (int k=0; k<largeur; k++) { for (int l=0; l<nbrBytes; l++) fichierRAW << (unsigned char)getValeurOctet(i,k,hauteur-j,l); } } /* incrémentation du compteur pour l'affichage */ if (pos != NULL) (*pos)++; /* on se décale pour se placer au début de l'image suivante */ for (int i=0; i!=espace; i++) fichierRAW << " "; } fichierRAW.close(); }}