Librairie jpeg et bug : user breakpoint called from code 0x7c911230

Ayla_21 Messages postés 9 Date d'inscription lundi 3 octobre 2005 Statut Membre Dernière intervention 15 novembre 2005 - 7 nov. 2005 à 11:24
Ayla_21 Messages postés 9 Date d'inscription lundi 3 octobre 2005 Statut Membre Dernière intervention 15 novembre 2005 - 8 nov. 2005 à 14:07
Bonjour tout le monde

après des jours et des jours de bataille acharnée avec la librairie Jpeg, j'ai réussi à l'installer et à débugger quelques lignes de codes.

Le souci c'est que là je n'ai plus de solutions : j'ai un bug jamais rencontré (mais bon étant débutante en programmation, c'est pas difficile) :

Le débugger me dit "User Breakpoint called from code at 0x7c91123"
Ce bug apparaît à la ligne : "jpeg_finish_decompress(&cinfo);"

Et là je ne vois pas du tout ce que cela peut signifie:

int main (char *photo_jpg)
{
cMatrice_Photo rvb;
struct jpeg_decompress_struct cinfo;
struct jpeg_error_mgr jerr;
unsigned char *image;
FILE *photo; // descripteur de fichier.
unsigned char *ligne;
int i3,j3; // utilisées lors des boucles.
fprintf(stderr, "Usage : %s fichier.jpg\n\n");
cinfo.err = jpeg_std_error(&jerr);
jpeg_create_decompress(&cinfo);

photo = fopen("photo_jpg.jpg","rb");
if(!photo)
{ cout << "Chargement du Fichier échoué"<< endl; return 1;}

jpeg_stdio_src(&cinfo, photo);
jpeg_read_header(&cinfo, TRUE);


// obtention des dimensions de l'image.
int width = cinfo.image_width;
int height = cinfo.image_height;

// allocation de mémoire pour le stockage des pixels en mémoire.
image = (unsigned char*) malloc (width * height * sizeof(unsigned char));


jpeg_start_decompress(&cinfo);
ligne=image;


while (cinfo.output_scanline<cinfo.output_height)
{
ligne=image + width * cinfo.output_scanline;
jpeg_read_scanlines(&cinfo,&ligne,1);


}

jpeg_finish_decompress(&cinfo);
jpeg_destroy_decompress(&cinfo);

// passe dans chaque colonne de pixels (...)
for (i3=0;i3<256;i3++)
// (...) puis par ligne
{
for (j3=0;j3<256;j3++)
{ // on récupère les valeurs des couleurs RVB (...)
int color_r = image[i3*256*3+j3*3];
int color_v = image[i3*256*3+j3*3+1];
int color_b = image[i3*256*3+j3*3+2];

rvb.I = i3 +1;
rvb.J = j3 + 1;
rvb.R = color_r;
rvb.V = color_v;
rvb.B = color_b;
LMatrice_Photo.push_back(rvb);

}//for j
};//for i
fclose (photo);


return 0; }

Est-ce un problème de mémoire ou un problème de configuration du débugger??
Quelqu'un aurait-il une idée à me suggérer?


Ayla_21

3 réponses

meech Messages postés 209 Date d'inscription vendredi 11 avril 2003 Statut Membre Dernière intervention 14 août 2007
8 nov. 2005 à 01:08
Bonsoir,

Ouh là... cela ressemble fort à un des codes que j'ai posté sur un forum http://www.cppfrance.com/forum.v2.aspx?ID=526548, au commentaire près ;-).
Ben, j'ai sans doute foiré et, je cherche... pour l'instant en vain.
Il me semblerait en effet qu'il y ait un dépassement de mémoire quelque part, mais où ?

A plus tard.
0
meech Messages postés 209 Date d'inscription vendredi 11 avril 2003 Statut Membre Dernière intervention 14 août 2007
8 nov. 2005 à 01:23
Re-bonsoir,

La ligne d'allocation dynamique de mémoire pour la variable image semble poser problème.

Tu devrais utiliser "sizeof(unsigned int)" au lieu de "sizeof(unsigned char)".

En fait, un type de données non signé char tient sur 1 octet, alors qu'un type de données non signé entier tient sur quatre octets. De fait, tu n'alloues pas suffisamment de mémoire pour décompresser l'ensemble du fichier d'où, peut-être, l'apparition de l'erreur que tu évoques.

En espérant t'avoir aidé,
A bientôt et bonne continuation (un peu pénible de lire des jpeg, non ? ;-)
0
Ayla_21 Messages postés 9 Date d'inscription lundi 3 octobre 2005 Statut Membre Dernière intervention 15 novembre 2005
8 nov. 2005 à 14:07
Salut meech

Oui il s'agit de ton code que tu m'avais envoyé cet été, ca me dépanne pas mal.
Merci encore. pour le problème j'ai fait le choix de tout passer en unsigned char car c'est tout ce qu'accepte la fonction jpeg_read_scanlines en paramètres.

Pour l'instant ca tourne.
Et oui, la lib jpeg est PENIBLE et c'est encore un faible mot : j'y suis depuis je ne sais combien de jours. Mais le code que tu m'avais donné m'a bcp aidé : c'est juste l'installation de la librairie qui n'est pas évidente.

Juste une dernière question : quand on récupère les valeurs de RVB les pixels sont lus de gauche à droite mais pour moi c'est de bas en haut. Mais sur d'autres codes similaires il est dit que c'est de haut en bas. Tu en penses quoi?

Merci


Ayla_21
0
Rejoignez-nous