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

MFC Discussion :

[GDI] Problème de sauvegarde d'une bitmap


Sujet :

MFC

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2004
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 23
    Par défaut [GDI] Problème de sauvegarde d'une bitmap
    Bonjour,

    Voilà, j'essai de sauvegarder une BMP. J'ai trouvé ce code qui fonctionne dans la majorité des cas, mais sur certain PC, il ne marche pas.
    Apparement, c'est GetDIBits qui ne fonctionne pas tout le temps. J'ai beau chercher, je n'arrive pas à trouver d'où peut venir le problème.

    Est-ce que quelqu'un à déjà eu le problème ou avez-vous des pistes de réflexions ?

    Voici le code qui me pose problème.

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
     
    bool CPrinterRPG::SaveBitmap(HDC hDC,HBITMAP hBitmap,CString szPath)
    {
      FILE * fp= NULL;
      fp = fopen(szPath.GetBuffer(1),"wb");
      if(fp == NULL)
          return false;
     
      BITMAP Bm;
      BITMAPINFO BitInfo;
      ZeroMemory(&BitInfo, sizeof(BITMAPINFO));
      BitInfo.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
      BitInfo.bmiHeader.biBitCount = 0;
     
      if(!::GetDIBits(hDC, hBitmap, 0, 0, NULL, &BitInfo, DIB_RGB_COLORS))
          return (false);
     
      Bm.bmHeight = BitInfo.bmiHeader.biHeight;
      Bm.bmWidth  = BitInfo.bmiHeader.biWidth;
     
      BITMAPFILEHEADER    BmHdr;
     
      BmHdr.bfType        = 0x4d42;   // 'BM' WINDOWS_BITMAP_SIGNATURE
      BmHdr.bfSize        = (((3 * Bm.bmWidth + 3) & ~3) * Bm.bmHeight) 
                            + sizeof(BITMAPFILEHEADER) 
                            + sizeof(BITMAPINFOHEADER);
      BmHdr.bfReserved1   = BmHdr.bfReserved2 = 0;
      BmHdr.bfOffBits     = (DWORD) sizeof(BITMAPFILEHEADER) 
                            + sizeof(BITMAPINFOHEADER);
     
      BitInfo.bmiHeader.biCompression = 0;
     
      // Writing Bitmap File Header ////
      fwrite(&BmHdr,sizeof(BITMAPFILEHEADER),1,fp);
     
      fwrite(&BitInfo.bmiHeader,sizeof(BITMAPINFOHEADER),1,fp);
     
      BYTE *pData = new BYTE[BitInfo.bmiHeader.biSizeImage + 5];
      if(!::GetDIBits(hDC, hBitmap, 0, Bm.bmHeight, 
                   pData, &BitInfo, DIB_RGB_COLORS))
          return (false);
     
      if(pData != NULL)
          fwrite(pData,1,BitInfo.bmiHeader.biSizeImage,fp);
     
      fclose(fp);
      delete (pData);
     
      return (true);
    }
    Merci d'avance

  2. #2
    Rédacteur
    Avatar de nico-pyright(c)
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    6 414
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 6 414
    Par défaut
    tu peux dans un premier temps vérifier si ton DC supporte bien la fonction GetDIBits
    avec GetDeviceCaps et RASTERCAPS et RC_DI_BITMAP

Discussions similaires

  1. Réponses: 1
    Dernier message: 04/06/2014, 18h30
  2. GDI+, changer la source d'une Bitmap
    Par the-morpher dans le forum C#
    Réponses: 2
    Dernier message: 14/11/2013, 02h54
  3. problème de sauvegarde d'une 2ème datagridview
    Par norddist dans le forum VB.NET
    Réponses: 5
    Dernier message: 03/09/2010, 16h04
  4. Réponses: 0
    Dernier message: 17/06/2010, 15h13
  5. Problème de sauvegarde dans une structure
    Par Invité dans le forum Windows Forms
    Réponses: 8
    Dernier message: 18/05/2008, 11h24

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