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

cs_Tobii 6 Messages postés jeudi 1 juin 2006Date d'inscription 3 juillet 2006 Dernière intervention - 2 juil. 2006 à 23:30 - Dernière réponse : cs_Tobii 6 Messages postés jeudi 1 juin 2006Date d'inscription 3 juillet 2006 Dernière intervention
- 3 juil. 2006 à 19:44
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.
Afficher la suite 

Votre réponse

4 réponses

Meilleure réponse
vecchio56 6539 Messages postés lundi 16 décembre 2002Date d'inscription 22 août 2010 Dernière intervention - 3 juil. 2006 à 10:06
3
Merci
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

Merci vecchio56 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 72 internautes ce mois-ci

Commenter la réponse de vecchio56
vecchio56 6539 Messages postés lundi 16 décembre 2002Date d'inscription 22 août 2010 Dernière intervention - 2 juil. 2006 à 23:40
0
Merci
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
Commenter la réponse de vecchio56
cs_Tobii 6 Messages postés jeudi 1 juin 2006Date d'inscription 3 juillet 2006 Dernière intervention - 3 juil. 2006 à 01:14
0
Merci
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
Commenter la réponse de cs_Tobii
cs_Tobii 6 Messages postés jeudi 1 juin 2006Date d'inscription 3 juillet 2006 Dernière intervention - 3 juil. 2006 à 19:44
0
Merci
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.
Commenter la réponse de cs_Tobii

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.