Probleme d'exécution avec vc++, c'est urgent

Résolu
sousou_one Messages postés 34 Date d'inscription mardi 19 juillet 2005 Statut Membre Dernière intervention 5 avril 2006 - 21 juil. 2005 à 09:00
sousou_one Messages postés 34 Date d'inscription mardi 19 juillet 2005 Statut Membre Dernière intervention 5 avril 2006 - 21 juil. 2005 à 11:03
bonjour à tous,
j'ai probleme au niveau de l'execution d'un programme sous visual c++, il me donne lemessage d'erreur : libbmp_write.exe a rencontr
é
un problème et doit fermer. Nous vous prions de nous excuser pour le désagrément encouru.

voilà le code:

//libbmp.h
#ifndef _LIBBMP_H_
#define _LIBBMP_H_


#define LIBBMP_VERSION 0.1


typedef struct s_rgb
{
unsigned char r;
unsigned char g;
unsigned char b;
unsigned char moy;


} t_rgb;


typedef struct s_bmp_fh
{
short sType; // Deux caractères B et M
int iSize; // Taille total du fichier
short sReserved1; // 0
short sReserved2; // 0
int iOffBits; // Offset des bits du bitmap dans le fichier


} t_bmp_fh;


typedef struct s_bmp_sh
{
int iSize; // Taille de cette structure en octets
int iWidth; // Largeur du bitmap en pixel
int iHeight; // Hauteur du bitmap en pixel
short sPlanes; // 1
short sBitCount; // Bits couleurs par pixel
int iCompression; // Schéma de compactage (0 pour aucun)
int iSizeImage; // Taille de l’image en octets (utile pour le compactage)
int iXpelsPerMeter; // Résolution horizontale en pixels par mètre
int iYpelsPerMeter; // Résolution verticale en pixels par mètre
int iClrUsed; // Nombre de couleurs utilisées dans l’image
int iClrImportant; // Nombre de couleurs importantes


} t_bmp_sh;


typedef struct s_bmp_header
{
t_bmp_fh first_header;
t_bmp_sh second_header;


} t_bmp_header;


typedef struct s_bmp
{
t_bmp_header header;
int width;
int width_useless;
int height;
t_rgb **data;


} t_bmp;


int libbmp_write(char *filename, t_bmp *bmp);


#endif

//libbmp.cpp
#include <stdlib.h>
#include <stdio.h>
#include "libbmp.h"


int main(char *filename, t_bmp *bmp)
{
int i, j;
FILE *fd;


if ((fd fopen("res.bmp", "wb")) NULL)
return (0);
fwrite(&(bmp->header.first_header.sType), sizeof(short), 1, fd); // 0 - 1
fwrite(&(bmp->header.first_header.iSize), sizeof(int), 1, fd); // 2 - 5
fwrite(&(bmp->header.first_header.sReserved1), sizeof(short), 1, fd); // 6 - 7
fwrite(&(bmp->header.first_header.sReserved2), sizeof(short), 1, fd); // 8 - 9
fwrite(&(bmp->header.first_header.iOffBits), sizeof(int), 1, fd); // 10 - 13


fwrite(&(bmp->header.second_header.iSize), sizeof(int), 1, fd); // 14 - 17
fwrite(&(bmp->header.second_header.iWidth), sizeof(int), 1, fd); // 18 - 21
fwrite(&(bmp->header.second_header.iHeight), sizeof(int), 1, fd); // 22 - 25
fwrite(&(bmp->header.second_header.sPlanes), sizeof(short), 1, fd); // 26 - 27
fwrite(&(bmp->header.second_header.sBitCount), sizeof(short), 1, fd); // 28 - 29
fwrite(&(bmp->header.second_header.iCompression), sizeof(int), 1, fd); // 30 - 33
fwrite(&(bmp->header.second_header.iSizeImage), sizeof(int), 1, fd); // 34 - 37
fwrite(&(bmp->header.second_header.iXpelsPerMeter), sizeof(int), 1, fd); // 38 - 41
fwrite(&(bmp->header.second_header.iYpelsPerMeter), sizeof(int), 1, fd); // 42 - 45
fwrite(&(bmp->header.second_header.iClrUsed), sizeof(int), 1, fd); // 46 - 49
fwrite(&(bmp->header.second_header.iClrImportant), sizeof(int), 1, fd); // 50 - 53


for (i = 0; i < bmp->height; i++)
{
for (j = 0; j < bmp->width; j++)
{
fputc(bmp->data[i][j].b, fd);
fputc(bmp->data[i][j].g, fd);
fputc(bmp->data[i][j].r, fd);
}
for (j = 0; j < bmp->width_useless; j++)
fputc(0, fd);
}
fclose(fd);
return (1);
}

12 réponses

BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 103
21 juil. 2005 à 10:20
Ah bah voilà le problème !!!!!

J'ai travaillé sur une image de 600x400 de mon côté!!

Du coup, toi, (vu que mes boucles vont de 100 à 200) tu essayais d'accéder à des lignes inexistantes :)

En faisant des boucles de 50 à 100 (par exemple), tu verras donc un beau carré noir...enfin...

Buno
----------------------------------------
L'urgent est fait, l'impossible est en train de se faire. Pour les miracles, prévoir un délai...
3
BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 103
21 juil. 2005 à 09:11
Perdu...

Je t'ai déjà dit de "copier/coller" les fonctions libbp_load() et
libbmp_write() dans un fichier libbmp.cpp et de mettre au déut de ce
fichier #include "libbmp.h"



Ensuite, dans un fichier main.cpp, tu mets ce que je t'ai déjà donné....



Ici, tu utilise une variable bmp qui n'a pas été déclarée...

Buno
----------------------------------------
L'urgent est fait, l'impossible est en train de se faire. Pour les miracles, prévoir un délai...
0
sousou_one Messages postés 34 Date d'inscription mardi 19 juillet 2005 Statut Membre Dernière intervention 5 avril 2006
21 juil. 2005 à 09:19
je l'ai fait mais ça n'a pas marché, le probleme c'est avec la fonction libbmp_write.c, toujours la meme erreur, parce que j'ai testé la fonction libbmp_load.c et pas de pb
0
BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 103
21 juil. 2005 à 09:31
Euh... libbmp_write.c n'est pas une fonction mais un fichier...

Voici le code complet, qui fonctionne chez moi (petite précision: tu dois avoir un fichier test.bmp dans le même répertoire que les fichiers suivants):



************************************

// libbmp.h

#ifndef _LIBBMP_H_

#define _LIBBMP_H_





typedef struct s_rgb

{

unsigned char r;

unsigned char g;

unsigned char b;

unsigned char moy;



} t_rgb;





typedef struct s_bmp_fh

{

short
sType;
// Deux caractères B et M

int
iSize;
// Taille total du fichier

short
sReserved1; // 0

short
sReserved2; // 0

int
iOffBits;
// Offset des bits du bitmap dans le fichier



} t_bmp_fh;





typedef struct s_bmp_sh

{

int
iSize;
// Taille de cette structure en
octets

int
iWidth;
// Largeur du bitmap en pixel

int
iHeight;
// Hauteur du bitmap en pixel

short
sPlanes; // 1

short
sBitCount; //
Bits couleurs par pixel

int
iCompression;
// Schéma de compactage (0 pour aucun)

int
iSizeImage;
// Taille de l’image en octets (utile pour le
compactage)

int
iXpelsPerMeter;
// Résolution horizontale en pixels par mètre

int
iYpelsPerMeter;
// Résolution verticale en pixels par mètre

int
iClrUsed;
// Nombre de couleurs utilisées dans l’image

int
iClrImportant;
// Nombre de couleurs importantes



} t_bmp_sh;





typedef struct s_bmp_header

{

t_bmp_fh first_header;

t_bmp_sh second_header;



} t_bmp_header;





typedef struct s_bmp

{

t_bmp_header header;

int width;

int width_useless;

int height;

t_rgb **data;



} t_bmp;





int libbmp_load(char *filename, t_bmp *bmp);

int libbmp_write(char *filename, t_bmp *bmp);



#endif



**********************************************

// fichier libbmp.cpp

#include <stdlib.h>

#include <stdio.h>

#include "bmp.h"



int libbmp_load(char *filename, t_bmp *bmp)

{

int i, j;

FILE *fd;



if ((fd fopen(filename, "rb")) NULL)

return (0);

fread(&(bmp->header.first_header.sType),
sizeof(short), 1, fd);
// 0 - 1

fread(&(bmp->header.first_header.iSize),
sizeof(int), 1, fd);
// 2 - 5

fread(&(bmp->header.first_header.sReserved1),
sizeof(short), 1, fd); // 6
- 7

fread(&(bmp->header.first_header.sReserved2),
sizeof(short), 1, fd); // 8
- 9

fread(&(bmp->header.first_header.iOffBits),
sizeof(int), 1, fd);
// 10 - 13



fread(&(bmp->header.second_header.iSize),
sizeof(int), 1, fd);
// 14 - 17

fread(&(bmp->header.second_header.iWidth),
sizeof(int), 1, fd);
// 18 - 21

fread(&(bmp->header.second_header.iHeight),
sizeof(int), 1, fd);
// 22 - 25

fread(&(bmp->header.second_header.sPlanes),
sizeof(short), 1, fd);
// 26 - 27

fread(&(bmp->header.second_header.sBitCount),
sizeof(short), 1, fd); // 28 - 29


fread(&(bmp->header.second_header.iCompression), sizeof(int), 1,
fd); // 30 - 33


fread(&(bmp->header.second_header.iSizeImage), sizeof(int), 1,
fd); // 34 - 37


fread(&(bmp->header.second_header.iXpelsPerMeter), sizeof(int),
1, fd); // 38 - 41


fread(&(bmp->header.second_header.iYpelsPerMeter), sizeof(int),
1, fd); // 42 - 45

fread(&(bmp->header.second_header.iClrUsed),
sizeof(int), 1, fd);
// 46 - 49


fread(&(bmp->header.second_header.iClrImportant), sizeof(int),
1, fd); // 50 - 53



bmp->width = bmp->header.second_header.iWidth;

bmp->height = bmp->header.second_header.iHeight;

bmp->width_useless = bmp->width % 4;

bmp->data = (t_rgb**)malloc(bmp->height * sizeof(t_rgb*));

if (!(bmp->data))

return (0);

for (i = 0; i < bmp->height; i++)

{

bmp->data[i] = (t_rgb*)malloc(bmp->width * sizeof(t_rgb));

if (!(bmp->data[i]))

return (0);

for (j = 0; j < bmp->width; j++)

{

bmp->data[i][j].b = (unsigned char)fgetc(fd);

bmp->data[i][j].g = (unsigned char)fgetc(fd);

bmp->data[i][j].r = (unsigned char)fgetc(fd);


bmp->data[i][j].moy = (unsigned char)((bmp->data[i][j].r +
bmp->data[i][j].g + bmp->data[i][j].b) / 3);

}

for (j = 0; j < bmp->width_useless; j++)

fgetc(fd);

}

fclose(fd);

return (1);

}



int libbmp_write(char *filename, t_bmp *bmp)

{

int i, j;

FILE *fd;



if ((fd fopen(filename, "wb")) NULL)

return (0);

fwrite(&(bmp->header.first_header.sType),
sizeof(short), 1, fd); // 0 - 1

fwrite(&(bmp->header.first_header.iSize),
sizeof(int), 1, fd); // 2
- 5


fwrite(&(bmp->header.first_header.sReserved1), sizeof(short), 1,
fd); // 6 - 7


fwrite(&(bmp->header.first_header.sReserved2), sizeof(short), 1,
fd); // 8 - 9

fwrite(&(bmp->header.first_header.iOffBits), sizeof(int), 1, fd); // 10 - 13



fwrite(&(bmp->header.second_header.iSize),
sizeof(int), 1, fd); // 14 - 17

fwrite(&(bmp->header.second_header.iWidth), sizeof(int), 1, fd); // 18 - 21

fwrite(&(bmp->header.second_header.iHeight), sizeof(int), 1, fd); // 22 - 25

fwrite(&(bmp->header.second_header.sPlanes), sizeof(short), 1, fd); // 26 - 27

fwrite(&(bmp->header.second_header.sBitCount), sizeof(short), 1, fd); // 28 - 29

fwrite(&(bmp->header.second_header.iCompression), sizeof(int), 1, fd);// 30 - 33

fwrite(&(bmp->header.second_header.iSizeImage), sizeof(int), 1, fd); // 34 - 37

fwrite(&(bmp->header.second_header.iXpelsPerMeter), sizeof(int), 1, fd);// 38 - 41

fwrite(&(bmp->header.second_header.iYpelsPerMeter), sizeof(int), 1, fd);// 42 - 45

fwrite(&(bmp->header.second_header.iClrUsed), sizeof(int), 1, fd);// 46 - 49

fwrite(&(bmp->header.second_header.iClrImportant), sizeof(int), 1, fd);// 50 - 53



for (i = 0; i < bmp->height; i++)

{

for (j = 0; j < bmp->width; j++)

{

fputc(bmp->data[i][j].b, fd);

fputc(bmp->data[i][j].g, fd);

fputc(bmp->data[i][j].r, fd);

}

for (j = 0; j < bmp->width_useless; j++)

fputc(0, fd);

}

fclose(fd);

return (1);

}



****************************************

// fichier main.cpp


#include "bmp.h"



void main(void)

{

t_bmp _Bmp;



libbmp_load("test.bmp", &_Bmp);

for (int i=100; i<200; i++)

for (int j=100; j<200; j++)

{

_Bmp.data[j][i].r=0;

_Bmp.data[j][i].g=0;

_Bmp.data[j][i].b=0;

}



libbmp_write("test2.bmp", &_Bmp);

}




Buno
----------------------------------------
L'urgent est fait, l'impossible est en train de se faire. Pour les miracles, prévoir un délai...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
sousou_one Messages postés 34 Date d'inscription mardi 19 juillet 2005 Statut Membre Dernière intervention 5 avril 2006
21 juil. 2005 à 09:40
je l'ai fait mais toujours le meme probleme
0
sousou_one Messages postés 34 Date d'inscription mardi 19 juillet 2005 Statut Membre Dernière intervention 5 avril 2006
21 juil. 2005 à 09:45
je pense qu'il ya un pb au niveau de la boucle for de la fonction main, parce que si j'enleve cette boucle ça marche, mais j'ai besoin d'autres boucles pour faire des modifications je sais pas si j'arriverais à regler ce pb ou pas
en tout cas merci pour votre aide
0
BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 103
21 juil. 2005 à 09:52
Ok!

Est-ce que ton image fait plus que 200x200 pixels? Sinon, change les valeurs des bornes des boucles

Buno
----------------------------------------
L'urgent est fait, l'impossible est en train de se faire. Pour les miracles, prévoir un délai...
0
sousou_one Messages postés 34 Date d'inscription mardi 19 juillet 2005 Statut Membre Dernière intervention 5 avril 2006
21 juil. 2005 à 09:59
non c'est 120x140
0
sousou_one Messages postés 34 Date d'inscription mardi 19 juillet 2005 Statut Membre Dernière intervention 5 avril 2006
21 juil. 2005 à 10:22
ok merci bcp
0
BunoCS Messages postés 15472 Date d'inscription lundi 11 juillet 2005 Statut Modérateur Dernière intervention 25 mars 2024 103
21 juil. 2005 à 10:33
Pas de quoi!

Si tu as d'autres problèmes, n'hésites pas... Mais la prochaine fois, essaie de bien détailler tes soucis :)


Bonne prog' et n'oublie pas de cliquer sur "Réponse Acceptée" pour clore le post


Buno
----------------------------------------
L'urgent est fait, l'impossible est en train de se faire. Pour les miracles, prévoir un délai...
0
sousou_one Messages postés 34 Date d'inscription mardi 19 juillet 2005 Statut Membre Dernière intervention 5 avril 2006
21 juil. 2005 à 10:58
ok merci, mais je pense que je vais vous ennuier par mes questions parce que je vais avoir bcp de pb avec ce projet
0
sousou_one Messages postés 34 Date d'inscription mardi 19 juillet 2005 Statut Membre Dernière intervention 5 avril 2006
21 juil. 2005 à 11:03
Buno je pense que je dois coller votre nom sur mon le rapport de mon stage au lieu de celui de mon encadreur!!!
0
Rejoignez-nous