CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

J´aide les personne en C/C++

Koyo-K
Koyo-K
Niveau 9
23 septembre 2004 à 07:39:40

Je dois les mettre dans variables utilisateur ou variables système ?

franco01
franco01
Niveau 7
23 septembre 2004 à 10:59:51

A JeanYvesYves:
J´ai vu vers les pages 5 et 6 que tu parlais des parsers , justement ca m´intéresse car je dois en faire un. Bon c´est un peu plus complexe que ce dont vous parliez car c´est au fait un éditeur de niveau pour mon jeu.
Bref la où ca bloque c´est que j´ai besoin d´ouvrir une image en bitmap 24bits et lorsque j´essaie de l´ouvrir , les tests de ma fonction me renvoi une erreur alors que ca compile très bien chez une personne qui m´a donné la fonction.

Je vous passe le debut de la fonction :

int LoadBMP(char *filename, int nb)
{
GLubyte *image;
GLubyte Header[0x36];
GLuint DataPos, imageSize;
GLsizei Width,Height;
int i;

/ / Lit le fichier et son header
FILE * fichier = fopen(filename,"rb");
if ( !fichier) return -1;
if ( fread(Header,1,0x36,fichier)!=0x36) EXIT;//C´est ICI que ca bloque
if ( Header[0]!=´B´ || Header[1]!=´M´) EXIT;
if ( CTOI(Header[0x1E])!=0) EXIT;
if ( CTOI(Header[0x1C])!=24) EXIT;
Et ce que tu sais d´ou ca peut venir?

JeanYvesYves
JeanYvesYves
Niveau 10
23 septembre 2004 à 11:30:08

c´est ton fread qui foire alors ?
ça compile déja ?

donc si je comprends bien, ça va dans ton EXIT de la ligne dont tu me parles...

donne moi la valeur de retour de ton fread

donne moi la taille fu bitmap sur lequel tu fais ton test.

et sinon, essaie de remplacer Header par
&(Header[0])
comme 1er parametre.

franco01
franco01
Niveau 7
23 septembre 2004 à 11:49:33

Oui ca compile très bien même.
Oui ca va bien dans le exit
Au fait les tests sont ceux -ci :
//Lit le fichier et son header
fichier = fopen(File,"rb");
if ( !fichier) {
printf("##Erreur## Fichier %s non trouve\n", File);
return -1;
}
if ( fread(Header,1,0x36,fichier)!=0x36) {
printf("##Error## Not enough byte to read 0x36 header\n");
EXIT;
}
if ( Header[0]!=´B´ || Header[1]!=´M´) {
printf("##Error## header do not start with ´BM´\n");
EXIT;
}
if ( CTOI(Header[0x1E])!=0) {
printf("##Error## header byte 0x1E is ! = 0\n");
EXIT;
}
if ( CTOI(Header[0x1C])!=24) {
printf("##Error## header byte 0x1C is ! = 24\n");
EXIT;
}

Et lorsque je lui demande à la fonction d´ouvrir une image bmp, je vois dans la fenetre de contrôle de GLUT s´afficher: " ##Error## Not enough byte to read 0x36 header

Apparement fread renvoi 1.
J´ai essayé avec un bitmap de 256*256 et 512*512

J´a faites les modifs que tu m´a conseillés mais sans succès .

JeanYvesYves
JeanYvesYves
Niveau 10
23 septembre 2004 à 12:01:56

inverse les params 2 et 3 :

fread(Header,0x36,1,fichier)!=0x36)

et dis moi ce que ça renvoie

franco01
franco01
Niveau 7
23 septembre 2004 à 12:18:51

La fonction me renvoi 0 pas 1 .
:-)

franco01
franco01
Niveau 7
23 septembre 2004 à 12:46:03

M´enfin je te montre ce que j´ai ca pourra te donner quelques précisions :
deb=(fread(Header,1,0x36,fichier)); / /deb=0
deb=(fread(Header,1,0x36,fichier)!=0x36);//deb=1
Voia ce que j´obtiens...

franco01
franco01
Niveau 7
23 septembre 2004 à 13:11:12

Ca y est ca marche , j´ai dû rajouter stdio.h dans l´include

Mais maintenant ca me bloque au test suivant:
if ( Header[0]!=´B´ || Header[1]!=´M´) {
printf("##Error## header do not start with ´BM´\n");
EXIT;
}

franco01
franco01
Niveau 7
23 septembre 2004 à 13:15:59

Non au fait ca ne marche toujours pas pour le 0x36.
J´avais juste retirer les lignes et j´ai oublier de les remettre

JeanYvesYves
JeanYvesYves
Niveau 10
23 septembre 2004 à 13:45:14

pas normal tout ça !
tu es sur que ton fichier ne fait pas 0 octets ?

franco01
franco01
Niveau 7
23 septembre 2004 à 15:17:42

Non il ne fait pas 0 octet

JeanYvesYves
JeanYvesYves
Niveau 10
23 septembre 2004 à 15:29:11

essaie de remplacer ton 0x36 par 54...
mais je ne pense pas que ce soit cela

0 retourné, donc 0 octets lus ! !
c´est bizarre ça ! !

teste juste avant la ligne qui foire :

if ( feof(fichier)) printf("end of file\n");

et dis moi si ça apparait.

franco01
franco01
Niveau 7
23 septembre 2004 à 16:55:11

J´ai remplacé 0x36 par 54 mais ca ne change rien
Par contre lorsque je rajoute la ligne , elle apparaît bien à l´écran
Ca veut dire qu´on est à la fin du fichier?

JeanYvesYves
JeanYvesYves
Niveau 10
23 septembre 2004 à 17:06:07

tout a fait !
ça veut dire que le fichier que tu références fait 0 octets dans ce cas la...
clique droit dessus et fait " propriétés"

vérifie bien que tu appelles le bon ! ! dans le bon repertoire !

franco01
franco01
Niveau 7
23 septembre 2004 à 17:13:32

Ben c´est ce que j´ai fais mais le fichier n´a pas 0 octet il fait précisément 786 488 octets.

Et puis c´est le bon fichier que j´appelle puisqu´il y en a qu´un et il le trouve lors de l´ouverture du fichier;

J´ai mis ca pour le chargement de l´image ( je ne pense pas qu´il y ait d´erreur):
char Texture[256] = " gcs01_ed.bmp";
int id_tex_tile=0;
id_tex_tile = load_image(Texture);
Et ca appelle ma fonction .

franco01
franco01
Niveau 7
23 septembre 2004 à 18:07:09

J´ai fait un autre test juste pour voir si ca marchait
J´ai juste mis fopen , fread et fclose(bientot le mettre) et ca me fait toujours la meme erreur sauf que dans cette version , je n´ai pas " end of file " qui s´affiche alors qu´il a bien trouvé le fichier . Et le fichier ne fait pas 0 octet mais bien plus

JeanYvesYves
JeanYvesYves
Niveau 10
23 septembre 2004 à 18:13:30

ton probleme est étrange
essaie de fixer un repertoire absolu :

fopen("c:\\test.bmp","rb");

et tu renomes ton image en test.bmp et tu la met dans la racine du C:

( si ça se trouve tu bosses avec une copie de ton image qui s´est fait écrabouiller)

franco01
franco01
Niveau 7
23 septembre 2004 à 18:31:15

Ha oui maintenant ca marche mieux.
Je devais utiliser un fichier erroné alors.

Mais maintenant il se bloque à ce test :
if ( Header[0]!=´B´ || Header[1]!=´M´) {
printf("##Error## header do not start with ´BM´\n");
EXIT;
}
Ca signifie quoi tout ca?

0[0]7
0[0]7
Niveau 6
23 septembre 2004 à 19:06:57

J´ai déjà poser ces questions y´a qq temps, mais sans réponse :

L´erreur, c´est : gl/glut.h : No such file or directory

Code : ( juste pour tester si ça marche, je vous rassure ^^ ) :

  1. include < gl/glut.h>

void InitGL();
void Reshape(int width, int height);
void Draw();

int Win1;

int main( int argc, char *argv[ ], char *envp[ ] )
{
glutInit(&,argv);
glutInitWindowSize(640,480);
glutInitDisplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH);

Win1 = glutCreateWindow("Coucou ! ");

InitGL();
glutReshapeFunc(Reshape);
glutDisplayFunc(Draw);

glutMainLoop();

return 0;
}

void Reshape(int width, int height)
{
glViewport(0,0,width,height);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();

gluPerspective(45,float(width)/float(height),1,100
);
glMatrixMode(GL_MODELVIEW);
}

void Draw()
{
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();

gluLookAt(0,0,10,0,0,0,0,1,0);

glBegin(GL_TRIANGLES);
glVertex2i(0,1);
glVertex2i(-1,0);
glVertex2i(1,0);
glEnd();

glutSwapBuffers();
glutPostRedisplay();
}

void InitGL()
{
}

JeanYvesYves
JeanYvesYves
Niveau 10
23 septembre 2004 à 19:08:56

ça veut dire que ton fichier BMP ne commence pas pas les code " BM", c´est sa signature.

essaie de neutraliser la ligne et dit moi si ça marche.

mais bon, c´est pas normal en effet !
es tu sur que c´est bien une BMP que tu charges ?
essaie de l´ouvrir avec un éditeur hexa ( genre ultraedit) et assure toi que le codage commence bien, en ASCII, par BM, ce qui donne : 42 4D en hexa

bon, allez, sur ce j´y go !

Sous forums
  • Aide à l'achat Mac
  • Steam Deck
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Macintosh
  • Hardware