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

SL & STL C++ Discussion :

[ofstream] C -> C++ , save bitmap


Sujet :

SL & STL C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de ZaaN
    Inscrit en
    Novembre 2005
    Messages
    819
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 819
    Par défaut [ofstream] C -> C++ , save bitmap
    salut,
    Dans le cadre d'une sauvegarde d'une bitmap dans un fichier
    je suis vraiment une chèvre en c++.

    j'aimerais un peu d'aide pour translater ces lignes de C en C++ :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
      UINT nWrittenFileHeaderSize = fwrite(&bmfh, 1,sizeof(BITMAPFILEHEADER), pFile);
    UINT nWrittenInfoHeaderSize = fwrite(&_pBitmapInfo->bmiHeader,1, sizeof(BITMAPINFOHEADER), pFile);
    UINT nWrittenDIBDataSize = fwrite(_pBitmapData, 1, l_ImageSize, pFile);
    j'ai bettemetn tenté un truc du genre : mais sans resultat.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    	UINT nWrittenFileHeaderSize = l_FileOut.write(&bmfh,sizeof(BITMAPFILEHEADER));
    PS :
    creation et ouverture de fichier
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::ofstream l_FileOut(_fileName,std::ios_base::binary);
    fermeture de fichier
    merci pour toute aide

  2. #2
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 290
    Billets dans le blog
    2
    Par défaut
    bonjour,

    tu peux déjà commencer par faire un tour sur la faq: http://c.developpez.com/faq/cpp/?page=fichiers

    Si tu as encore des soucis après (m'enfin, normalement tu as tout ce qu'il te faut là) n'hésite pas à le faire savoir.

    Hope it helps.

  3. #3
    Membre éclairé Avatar de ZaaN
    Inscrit en
    Novembre 2005
    Messages
    819
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 819
    Par défaut
    déjà consultée.... mais ca ma pas aidé, j'ai ce problème de compil

    error C2664: 'std::basic_ostream<_Elem,_Traits>::write'*: impossible de convertir le paramètre 1 de 'BITMAPFILEHEADER' en 'const char *'

  4. #4
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 290
    Billets dans le blog
    2
    Par défaut
    ok,

    alors en effet, il n'est pas possible de convertir un BITMAPFILEHEADER ( cf msdn ) en char*.

    J'imagine que tu veux écrire les données contenues dans ce BITMAPFILEHEADER. Il va donc te falloir convertir chaque champ de cette structure, un par un, et les écrire dans ton fichier.

    P.S: remarque d'ordre général: tu ne donnes pas assez de précisions dans tes posts.

  5. #5
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    Euh, je ne sais pas si tu as lu "storing an image", mais le BitmapFileHeader est écrit en bloc...

    Moi, je ferais un write(static_cast<const void *>(&bmfh), [autres paramètres])
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  6. #6
    Membre éclairé Avatar de ZaaN
    Inscrit en
    Novembre 2005
    Messages
    819
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 819
    Par défaut
    ok, je vous explique mon but convertir cette fonction en C++
    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
    20
    21
    22
    FILE *pFile = fopen(szPathName, "wb"); 
          if(pFile == NULL) 
          { 
             AfxMessageBox(IDS_FILE_CREATE_ERROR_MESSAGE); 
             return; 
          } 
          BITMAPFILEHEADER bmfh;    
          int nBitsOffset = sizeof(BITMAPFILEHEADER) + BMIH.biSize; 
          LONG lImageSize = BMIH.biSizeImage; 
          LONG lFileSize = nBitsOffset + lImageSize; 
          bmfh.bfType = 'B'+('M'<<8);          
          bmfh.bfOffBits = nBitsOffset;       
          bmfh.bfSize = lFileSize;             
          bmfh.bfReserved1 = bmfh.bfReserved2 = 0; 
          //Write the bitmap file header 
          UINT nWrittenFileHeaderSize = fwrite(&bmfh, 1, sizeof(BITMAPFILEHEADER), pFile); 
          //And then the bitmap info header 
          UINT nWrittenInfoHeaderSize = fwrite(&BMIH, 1, sizeof(BITMAPINFOHEADER), pFile); 
          //Finally, write the image data itself -- the data represents our drawing 
          UINT nWrittenDIBDataSize = fwrite(m_pDrawingSurfaceBits, 1, lImageSize, pFile); 
     
          fclose(pFile);

  7. #7
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 290
    Billets dans le blog
    2
    Par défaut
    Citation Envoyé par Médinoc
    Euh, je ne sais pas si tu as lu "storing an image", mais le BitmapFileHeader est écrit en bloc...

    Moi, je ferais un write(static_cast<const void *>(&bmfh), [autres paramètres])
    Ha, autant pour moi, je ne savais pas.

  8. #8
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Il y a pourtant tout ce qu'il faut dans la FAQ pour l'écriture de données binaires.

    http://c.developpez.com/faq/cpp/?pag...ERS_read_write

  9. #9
    Membre éclairé Avatar de ZaaN
    Inscrit en
    Novembre 2005
    Messages
    819
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 819
    Par défaut
    le problème ne vient pas de l'ecriture des bytes dans le fichier mais plustot de la manière de formater les elements à ecrire.


    Citation Envoyé par ZaaN
    déjà consultée.... mais ca ma pas aidé, j'ai ce problème
    de compil

    error C2664: 'std::basic_ostream<_Elem,_Traits>::write'*: impossible de convertir le paramètre 1 de 'BITMAPFILEHEADER' en 'const char *'

  10. #10
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Inutile de formater (sauf si tu veux rester portable, mais là c'est une autre histoire), écris simplement ta structure directement. Et comme te l'indiquent le compilo et la FAQ, il faudra passer par un petit cast en const char*.

  11. #11
    Membre éclairé Avatar de ZaaN
    Inscrit en
    Novembre 2005
    Messages
    819
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 819
    Par défaut
    le ptit cast en char *:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    UINT nWrittenDIBDataSize = l_FileOut.write((char *)_pBitmapData,l_ImageSize);
    me retourne cette erreur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    error C2440: 'initialisation' : impossible de convertir de 'std::basic_ostream<_Elem,_Traits>::_Myt' en 'UINT'
            with
            [
                _Elem=char,
                _Traits=std::char_traits<char>
            ]

    je ne comprend simplment pas cette erreur, si qqn pouvait m'aider... merci d'avance
    PS j'ai beau caster en "const char *", l'erreur reste la meme.

  12. #12
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    Par défaut
    visiblement, le type de retour de write n'est pas int.
    Regarde dans la doc et mets le bon type à la place...
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  13. #13
    Membre éclairé Avatar de ZaaN
    Inscrit en
    Novembre 2005
    Messages
    819
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 819
    Par défaut
    a force de chercher loin on oublie ce qui est proche

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

Discussions similaires

  1. Texture and Saving Bitmap or Video
    Par capriolo dans le forum DirectX
    Réponses: 1
    Dernier message: 22/04/2007, 14h54
  2. transfert d'un fichier bitmap en socket tcp
    Par localhost dans le forum C++Builder
    Réponses: 5
    Dernier message: 29/07/2002, 00h40
  3. Pb Lecture de bitmap monochrome
    Par Loïc38 dans le forum C++Builder
    Réponses: 4
    Dernier message: 02/07/2002, 18h24
  4. Lecture d'une image bitmap
    Par Geronimo dans le forum x86 32-bits / 64-bits
    Réponses: 18
    Dernier message: 28/06/2002, 12h01
  5. Comment faire pour créer un bitmap
    Par GliGli dans le forum C++Builder
    Réponses: 2
    Dernier message: 24/04/2002, 15h41

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