All pastes #793502 Raw Edit

fichier RAW of the death !

public cpp v1 · immutable
·published 2007-11-22 10:06 UTC
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();	}}