Bonjour à tous,

Je programme un logiciel de conversion d'images de deux formats différents et j'ai quelques soucis.

Je programme via Visual C++. Je crée une dll pour un logiciel d'image.
Le code ci dessous compile bien mais à l'exécution (dans le logiciel d'image), ça plante (le logiciel se ferme brutalement).

J'ai pu constater (grâce aux traces) que cela se produits à la fin de la boucle while (autrement dit quand on a lu les octets souhaité - la fin du fichier n'étant pas atteinte).


Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
//déclaration des variables
	char octet;
	bool run = true;
	int numOctet = 0;
	string  buff, image, header_dm2;
	int dimension, offsetArrayOffset,dataType, width, height, pixelDepth, nbOctetImage;

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 
i = 1;
while (i <= nbOctetImage) {    //nbOctet= 8 388 608
        f_in.read(&octet , 1);
        oct = octet;
        s_octet = getOctetLu(oct);
        image = image + s_octet;
        numOctet++;
        i++;
       //trace
       PlugIn::gResultOut << i << endl;
}

Le problème vient de la ligne
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
f_in.read(&octet , 1);
En effet pour tester quand j'execute le code ci dessous ca plante:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
   f_in.read(&octet , 4000000);
Je comprend vraiment pas ce bug







J'ai aussi un deuxième problème.
Un pixel d'image est représenté par deux octets X1X2X3X4 Y1Y2Y3Y4. Ce sont les valeur hexadécimal.

Le problèmes c'est que dans ce format la valeur de l'octet en hexadécimal est:
Y3Y4Y1Y2 X3X4X1X2 au lieu de X1X2X3X4 Y1Y2Y3Y4.
Je dois donc octet par octet traiter manuellement cela avant de calculer la valeur en décimal de Y3Y4Y1Y2 X3X4X1X2.
Le problème c'est qu'à l'execution cela va prendre beaucoup trop de temps.

Est-ce que quelqu'un aurait une idée pour résoudre cela?
J'ai aussi vaguement entendu parler de swap data sans comprendre vraiment ce que c'était. Est-ce que cela pourrait résoudre mon problème?


Merci d'avance pour votre aide,
funkyKong