cs_Tobii
Messages postés6Date d'inscriptionjeudi 1 juin 2006StatutMembreDernière intervention 3 juillet 2006
-
2 juil. 2006 à 23:30
cs_Tobii
Messages postés6Date d'inscriptionjeudi 1 juin 2006StatutMembreDernière intervention 3 juillet 2006
-
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.
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 3 juil. 2006 à 10:06
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
vecchio56
Messages postés6535Date d'inscriptionlundi 16 décembre 2002StatutMembreDernière intervention22 août 201014 2 juil. 2006 à 23:40
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)
cs_Tobii
Messages postés6Date d'inscriptionjeudi 1 juin 2006StatutMembreDernière intervention 3 juillet 2006 3 juil. 2006 à 01:14
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