Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
731 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Est-ce que quelqu'un pourrait m'envoyer une bitmap 8bits ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Est-ce que quelqu'un pourrait m'envoyer une bitmap 8bits ?

n°806286
Jesus Army
Allez voir là bas si j'y suis
Posté le 26-07-2004 à 13:07:42  profilanswer
 

:hello:
 
Bon désolé pour la question étrange, mais je vais tacher d'expliquer mon problème...
 
Je me suis fait une fonction permettant de lire une image bitmap et de l'afficher avec le GDI, mais j'ai un ptit problème avec... En effet, je suis censé pouvoir lire et afficher les images bitmaps 8 bits, et j'y arrive, mais pas avec des images que je fais moi meme ! :/ Je m'explique... Si je prends une bitmap 8 bits présente dans le répertoire de windows ca marche, mais si je me fais une image 8 bits (non compréssée) avec paint ou photoshop, mon image s'affiche soit très mal, soit pas du tout... :/ Comme si elle n'etait pas enregistrée de la meme facon, et que la palette ne se trouvait pas au meme endroit...
 
Je voulais donc savoir si quelqu'un pouvait m'envoyer une image bitmap 8 bits de sa création en me précisant le logiciel utilisé et son OS, pour essayer de voir où est le problème de mon coté...
 
Mercÿte :jap:

mood
Publicité
Posté le 26-07-2004 à 13:07:42  profilanswer
 

n°806376
youdontcar​e
Posté le 26-07-2004 à 14:26:18  profilanswer
 

Tu veux dire une .BMP ? Avec quoi tu la lis ? Quelle dimension ont celle qui plantent ? (largeur x hauteur)

n°806391
Jesus Army
Allez voir là bas si j'y suis
Posté le 26-07-2004 à 14:34:28  profilanswer
 

Je la lis avec cette fonction : (depuis une ressource)

Code :
  1. //Là c'est la methode appellée par le constructeur
  2. BOOL Bitmap::Create(HDC hDC, UINT uiResID, HINSTANCE hInstance)
  3. {
  4.   // Free any previous DIB info
  5.   Free();
  6.   // Find the bitmap resource
  7.   HRSRC hResInfo = FindResource(hInstance, MAKEINTRESOURCE(uiResID), RT_BITMAP);
  8.   if (hResInfo == NULL)
  9.     return FALSE;
  10.   // Load the bitmap resource
  11.   HGLOBAL hMemBitmap = LoadResource(hInstance, hResInfo);
  12.   if (hMemBitmap == NULL)
  13.     return FALSE;
  14.   // Lock the resource and access the entire bitmap image
  15.   PBYTE pBitmapImage = (BYTE*)LockResource(hMemBitmap);
  16.   if (pBitmapImage == NULL)
  17.   {
  18.     FreeResource(hMemBitmap);
  19.     return FALSE;
  20.   }
  21.   // Store the width and height of the bitmap
  22.   BITMAPINFO* pBitmapInfo = (BITMAPINFO*)pBitmapImage;
  23.   m_iWidth = (int)pBitmapInfo->bmiHeader.biWidth;
  24.   m_iHeight = (int)pBitmapInfo->bmiHeader.biHeight;
  25.   // Get a handle to the bitmap and copy the image bits
  26.   PBYTE pBitmapBits;
  27.   m_hBitmap = CreateDIBSection(hDC, pBitmapInfo, DIB_RGB_COLORS,
  28.     (PVOID*)&pBitmapBits, NULL, 0);
  29.   if ((m_hBitmap != NULL) && (pBitmapBits != NULL))
  30.   {
  31.     const PBYTE pTempBits = pBitmapImage + pBitmapInfo->bmiHeader.biSize +
  32.       pBitmapInfo->bmiHeader.biClrUsed * sizeof(RGBQUAD);
  33.     CopyMemory(pBitmapBits, pTempBits, pBitmapInfo->bmiHeader.biSizeImage);
  34.     // Unlock and free the bitmap graphics object
  35.     UnlockResource(hMemBitmap);
  36.     FreeResource(hMemBitmap);
  37.     return TRUE;
  38.   }
  39.   // Something went wrong, so cleanup everything
  40.   UnlockResource(hMemBitmap);
  41.   FreeResource(hMemBitmap);
  42.   Free();
  43.   return FALSE;
  44. }


 
Et ensuite je la dessine avec celle ci :

Code :
  1. void Bitmap::Draw(HDC hDC, int x, int y, BOOL bTrans, COLORREF crTransColor)
  2. {
  3.   if (m_hBitmap != NULL)
  4.   {
  5.     // Create a memory device context for the bitmap
  6.     HDC hMemDC = CreateCompatibleDC(hDC);
  7.     // Select the bitmap into the device context
  8.     HBITMAP hOldBitmap = (HBITMAP)SelectObject(hMemDC, m_hBitmap);
  9.     // Draw the bitmap to the destination device context
  10.     if (bTrans)
  11.       TransparentBlt(hDC, x, y, GetWidth(), GetHeight(), hMemDC, 0, 0,
  12.         GetWidth(), GetHeight(), crTransColor);
  13.     else
  14.       BitBlt(hDC, x, y, GetWidth(), GetHeight(), hMemDC, 0, 0, SRCCOPY);
  15.     // Restore and delete the memory device context
  16.     SelectObject(hMemDC, hOldBitmap);
  17.     DeleteDC(hMemDC);
  18.   }
  19. }


Et ca marche très bien pour toutes les zimages bmp 8 bits de windows, mais pas les mienne... Et il suffit par exemple que j'ouvre la bitmap avec paint, que je fasse une modif d'un pixel et que je save et hop ca ne marche plus... :/

n°806494
bjone
Insert booze to continue
Posté le 26-07-2004 à 15:30:49  profilanswer
 

je dirais un classique pb d'alignement sur DWORD des BMP.
 
ton pTempbits, aligne le sur 4 octets en faisant un:
pTempbits = (pTempbits+3)&(~3);
pour voir comme ça...

n°806495
youdontcar​e
Posté le 26-07-2004 à 15:31:24  profilanswer
 

He bien aucune idée. Je pensais que ça plantait sur des images dont la largeur n'était pas un multiple de 4, mais si tu ne modifies qu'un pixel et que ça plante je ne vois vraiment pas d'où ça vient.

n°806562
bjone
Insert booze to continue
Posté le 26-07-2004 à 16:02:16  profilanswer
 

bin je pense comme toi youdontcare, ptet que l'alignement bouge après la sauvegarde avec paint :/

n°806595
youdontcar​e
Posté le 26-07-2004 à 16:18:44  profilanswer
 

L'alignement dépend de la taille, si elle ne change pas il ne change pas.  
 
Peut-être un changement de 8b -> 24b fait par paint alors ?

n°806622
TotalRecal​l
Posté le 26-07-2004 à 16:39:54  profilanswer
 

Compare les headers de tes propres images et celle qui fonctionnent, tu trouveras peut être.  
Peut être une histoire de longueur de champ, de version de headers (il y en a plusieurs pour le bmp ?), de palette...


---------------
Topic .Net - C# @ Prog
n°806623
Jesus Army
Allez voir là bas si j'y suis
Posté le 26-07-2004 à 16:40:15  profilanswer
 

Pourtant non si je regarde les propriétés de l'image elle est toujours en 8 bits... Mais sinon j'ai aussi le problème avec photoshop... :/
 
Donc soit je suis vraiment polio et pas capable de faire une bitmap 256 couleurs, soit ya un problème avec les bitmap sur mon PC... :(
 
Parcequ'en fait au debut je pensais que c'etait mon code qui ne marchait pas mais en fait j'ai remarqué qu'il marchait avec les bitmaps qui n'etait pas de ma création... :/

n°807019
Joel F
Real men use unique_ptr
Posté le 26-07-2004 à 22:08:49  profilanswer
 

Certains logiciels remplissent mal le header. J'en ai fait les frais l'an dernier >.< Blinde bien ton code pr tester TOUT les cas bidons qui peuvent se produrie et tu trouveras l'erreur.


Message édité par Joel F le 26-07-2004 à 22:09:27
mood
Publicité
Posté le 26-07-2004 à 22:08:49  profilanswer
 

n°807042
xterminhat​e
Si vis pacem, para bellum.
Posté le 26-07-2004 à 22:37:25  profilanswer
 

Effectivement, il arrive que les champs de l'entete du bitmap soient quasi tous nuls et donc non significatif. Les champs de type taille et profondeur sont les mieux renseignés.


---------------
Cordialement, Xterm-in'Hate...
n°807434
Jesus Army
Allez voir là bas si j'y suis
Posté le 27-07-2004 à 11:31:55  profilanswer
 

Ok d'accord merci pour les infos... :jap: Bon de toute facon je dois abandonner les bitmaps pour un truc plus leger et plusse beau, donc je ne vais pas trop m'attarder là dessus... :)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Est-ce que quelqu'un pourrait m'envoyer une bitmap 8bits ?

 

Sujets relatifs
Comment envoyer un mail avec la librairie "email" ??comment on peut envoyer des information en tapant Entrée
[batch] envoyer messageenvoyer une variable a une page
envoyer ligne avec tabulation pour excelenvoyer 2 variable dans une autre page
Comment reconstruire une image bitmap a partir d'un tableau?[borland C++] afficher une image bitmap URGENT svp
Conversion 8bits -> 7bitsenvoyer un mail en VB
Plus de sujets relatifs à : Est-ce que quelqu'un pourrait m'envoyer une bitmap 8bits ?


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR