IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Problème pour enregistrer un HBITMAP dans un fichier


Sujet :

C

  1. #1
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 77
    Points : 65
    Points
    65
    Par défaut Problème pour enregistrer un HBITMAP dans un fichier
    Bonjour, j'ai déjà fais quelques recherches et je crée un programme en C pour créer des Bitmaps.

    Je commence par faire un test très simple : créer une petite image et la mettre dans un fichier, mais rien que ça, ça ne fonctionne pas !
    J'imagine que mon erreur est toute bête, mais je n'ai jamais fais de C, plutôt du C++ et j'ai du mal dès que ça touche trop à la mémoire... (buffer, unsigned char et companie)

    Voilà mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    int main(int argc, char **argv)
    {
    	HBITMAP hb;
    	const int LARGEUR = 4;
    	char bufferImage[LARGEUR*LARGEUR*3];
    	for(int i = 0 ; i < LARGEUR * LARGEUR * 3 ; i++) {
    		bufferImage[i] = 'a';
    	}
     
    	// Création du bitmap
            hb = CreateBitmap(LARGEUR, LARGEUR, 1, 24, bufferImage);
     
            // Enregistrement dans un fichier
    	FILE *fichier;
    	if(fopen_s(&fichier, "lol.bmp", "w") == 0 ){
    		fwrite(&hb, sizeof(hb), 1, fichier);
    	}
     
    	return 0;
    J'ai bien un fichier lol.bmp qui est créé, mais sa taille est de 0 octets.

    Si par contre je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fwrite(hb, sizeof(hb), 1, fichier);
    j'ai une erreur mémoire...

    Par ailleurs, est-ce que quelqu'un pourrait m'expliquer rapidement ce qu'est HBITMAP, j'ai lu que c'était un "Handler", j'ai compris que c'était un struct, mais ce n'est toujours pas clair dans mon esprit... Apparement, dans les diverses FAQ que j'ai trouvées, tout ceci est évident pour tout le monde.

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    Par défaut
    a moins que ma mémoire ne fasse défaut, je ne connaît pas de HBITMAP en C ...

    Quel est ton langage ?

    Par contre, pour avoir travaillé avec des bitmaps déjà avec des outils divers, normalement HBITMAP devrait être une structure, je pense, et le buffer que tu veux écrire doit être spécifié quelque part dans la structure... MAis vouloir écrire la structure dans le fichier n'a aucun sens à mon avis...
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  3. #3
    Membre éclairé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 264
    Points : 725
    Points
    725
    Par défaut
    Salut,

    Un HBITMAP, c'est pas une structure, c'est un typedef d'un entier qui identifie une ressource (ici un bitmap) qui est géré par la GDI de Windows. Malheureusement je ne peux pas t'aider plus que ça. tu aurais certainement plus de réponses dans le forum programmation Windows.
    "By and large I'm trying to minimize mentions of D in C++ contexts because it's as unfair as bringing a machine gun to a knife fight." - Andrei Alexandrescu

  4. #4
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 77
    Points : 65
    Points
    65
    Par défaut
    Ok merci ... En fait, je veux programmer quelque chose en C++ qui crée une vidéo image par image et mes recherches m'ont amené à rencontrer HBITMAP. J'ai cru que c'était un bon vieux truc de C mais finalement ça doit être plus spécifiques au C++ que je ne l'imaginais !

    Du coup, je comprends mieux pourquoi mon code d'écriture dans un fichier n'a strictement aucun sens.

    Je vais reprendre l'étude de la GDI et voir si je peux y arriver comme ça.

    Si vous avez un lien sur les "handlers" (C++ donc ?) je le veux bien, je cherche sur google et sur les forums/FAQ depuis hier et apparement je suis le seul au monde à ne jamais en avoir entendu parler.
    (il est possible que je cherche mal )

  5. #5
    Membre éclairé

    Profil pro
    Inscrit en
    Mai 2005
    Messages
    264
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 264
    Points : 725
    Points
    725
    Par défaut
    Non, non, les handles, c'est spécifique à l'API Windows, pas à un langage en particulier. Tu peux les utiliser en C, en Pascal, en C++...

    A mon avis tu devrais considérer l'utilisation d'une API de plus haut niveau (dans tous les sens du terme ). Si tu veux utiliser C++ comme tu le dis, wxWidgets propose des classes toutes prêtes pour les formats d'images les plus courants, ce sera beaucoup plus simple et le code sera portable sous Windows, Linux et MacOS.

    De toute façon, que ce soit pour C++ ou l'API Win32, tu n'es pas dans le bon forum...
    "By and large I'm trying to minimize mentions of D in C++ contexts because it's as unfair as bringing a machine gun to a knife fight." - Andrei Alexandrescu

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème pour enregistrer dans un fichier XML
    Par Jb_One73 dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 14/02/2015, 08h22
  2. Réponses: 1
    Dernier message: 01/08/2013, 18h23
  3. Réponses: 9
    Dernier message: 23/02/2012, 18h33
  4. Réponses: 8
    Dernier message: 26/05/2010, 14h43
  5. Réponses: 6
    Dernier message: 28/12/2007, 22h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo