Visualiser une image codée dans un tableau de BYTE en api. [Résolu]

Signaler
Messages postés
6
Date d'inscription
jeudi 1 juin 2006
Statut
Membre
Dernière intervention
3 juillet 2006
-
Messages postés
6
Date d'inscription
jeudi 1 juin 2006
Statut
Membre
Dernière intervention
3 juillet 2006
-
C'est surement quelque chose de très simple à faire, je veux juste afficher dans une fenetre windows un tableau de BYTE (unsigned char) avec chaque BYTE représentant le niveau de gris d'un pixel (image codée sur 256 niveaux de gris donc). Je débute en api donc je sais pas trop quelle est la façon qui demande le moins de calculs, une solution pourrait etre de créer une image bitmap a partir de ce tableau de BYTE puis d'utiliser loadbitmap mais le problème c que ça risque d'etre trop long (il faut que j'affiche plusieurs images par seconde). Si quelqu'un pourrait me donner 2,3 mots- clé  ou noms de fonctions à utiliser j'irai chercher par moi meme après merci.

4 réponses

Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
Je ense qu'il faut bien utiliser la structure BITMAPINFO, ca suffit ici
Pour bmiColors, il faut qu'il fasse 256 bytes (tu dois donc réserver assez de place), et remplir de tableau avec toutes les valeurs (i, i, i) pour i allant de 0 à 255
Pour biSize, c'est effectivement sizeof qu'il faut utilsier, c'est un truc courant qu'il faut faire

Par contre, tu peux utiliser la fonction SetDIBitsToDevice, ce qui t'évite de créer une bitmap intermédiaire
Pour uStartScan, c'est la première ligne a afficher, donc 0
Pour cLines, c'est le nombre de lignes, donc la hauteur de ton image

_____________________________________
Un éditeur de ressources gratuit pour Windows
Messages postés
6535
Date d'inscription
lundi 16 décembre 2002
Statut
Modérateur
Dernière intervention
22 août 2010
7
Tu crées une bitmap dans un DC (CreateCompatibleBitmap/CreateCompatibleDC)
Puis avec SetDIBits tu modifies les bits de la bitmap à partir de ton tableau (dans le BITMAPINFOHEADER tu mets biBitCount à 8 puisque tu es en niveaux de gris)

_____________________________________
Un éditeur de ressources gratuit pour Windows
Messages postés
6
Date d'inscription
jeudi 1 juin 2006
Statut
Membre
Dernière intervention
3 juillet 2006

merci pour la réponse aussi rapide, j'ai pas encore trop testé mais d'après ce que j'ai lu dans l'help des différentes fonctions que tu m'as donné je verrai bien qq chose comme ça :

HDC hdc = GetDC(hwnd) ; // hwnd objet de type HWND : ma fenetre principale.
hdc = CreateCompatibleDC(hdc);

(par contre j'ai pas trop compris si cette fonction est necessaire et son interet).

HBITMAP   hbmp = CreateCompatibleBitmap( hdc ,     w  ,  h );  //w et h les dims de mon image.

SetDIBits(
   hdc,                  
  hbmp,             
  UINT uStartScan,         j'ai pas compris ce que c'est
  UINT cScanLines,          non plus
  (BYTE) image               //mon tableau de BYTE
  CONST BITMAPINFO *lpbmi,  
//structure contenant la structure BITMAPINFOHEADER dont tu parles ? dans l'help ils disent d'utiliser plutot la structure  [mk:@MSITStore:C:\Program%20Files\MSDN98\VC6intro\1033\GDI.chm::/devdoc/live/pdgrmm/bitmaps_7c36.htm BITMAPV5HEADER]  pour windows 98 ou + (jai xp)
  UINT fuColorUse          //si on utilise ou pas la palette de BITMAPINFO
);

pour la palette dans bitmapinfo comment on renseigne le champ RGBQUAD          bmiColors[1]  ?

imaginons j'ai un tableau UINT palette[256] qui donne les composantes RGB associé à chaque index (dans mon cas en gris pour l'index i, on aura les composantes rouge = vert = bleu = i)

je tape bitmapinfo.bmiColors[1] = ?

enfin derniere question dans BITMAPV5HEADER (ou BITMAPINFOHEADER) il faut remplir comment le premier champ DWORD  biSize ? ils disent nombre de byte requis pour la structure ?? autant faire un sizeof(BITMAPV5HEADER) non
Messages postés
6
Date d'inscription
jeudi 1 juin 2006
Statut
Membre
Dernière intervention
3 juillet 2006

c cool j'y arrive maintenant. merci pour les réponses rapides ça m'a beaucoup aidé.

J'ai même trouvé d'autres fonctions utiles comme BitBlt  bien pratique pour faire la mise à jour à chaque changement effectué sur le tableau de BYTE.