2009-04-23 6 views
3

J'ai un tableau de données rgb brutes. Je voudrais savoir comment puis-je dessiner ces pixels sur l'écran dans Windows OS?Dessiner un tableau de bits (rgb) dans les fenêtres

Maintenant, j'utilise la fonction API DrawDIBits, mais je dois afficher mes données d'image.

+0

Que signifie «monter» les données d'image? –

+0

Eh bien, c'est comme si vous aviez vos données d'image normales, et vous pouvez l'amplifier beaucoup plus! C'est tellement mieux. Personnellement, j'utilise une fonction MarshalImageAmp (byte * imageData, unsigned char gain) qui accepte un gain maximum de 256, puisque c'est tout simplement beaucoup mieux que les fonctions qui n'acceptent que les valeurs de 255 pour un char non signé. – Eclipse

Répondre

0

Si vous voulez dessiner sans inverser le (R, G, B) en (B, G, R), je ne connais pas un moyen automatique de le faire.

Si vous voulez dessiner sans doubler chaque ligne à un multiple de 4 pixels, vous pouvez le faire en dessinant chaque ligne une par une. Ce sera lent, cependant.

3

J'utilise toujours SetDiBitsToDevice, mais drawDIBits pourrait aussi bien se passer (pas vérifié).

Quant à la nature envers des fenêtres de fonctions blit:

Il existe une solution. Si vous transmettez une structure BITMAPINFOHEADER ou BITMAPINFO à la fonction, annulez simplement la valeur dans le membre bitmap-height. Cela indiquera à GDI de faire le blit comme si la hauteur serait positive, mais interpréterait les données comme étant stockées dans un ordre descendant.

Vous pouvez obtenir une amélioration de la vitesse par ce "hack". Si vous souhaitez mélanger l'ordre des octets des pixels (par exemple, transformer ARGB en BGRA), vous pouvez utiliser la structure BITMAPV4HEADER et indiquer à GDI comment vos données de pixels sont organisées. C'est une fonctionnalité qui est rarement utilisée mais fonctionne depuis WIN98. Je dirais qu'il est préférable de l'utiliser ces jours-ci.

+0

J'ai vérifié les documents pour BITMAPV4HEADER, et je ne vois pas un moyen d'inverser l'ordre RVB, sauf en utilisant BI_BITFIELDS - et cela ne fonctionne que 16/32BPP, pas 24BPP. –

+0

Oh, c'est vrai. J'utilise rarement le format 24 bits, je ne savais pas que les BI_BITFIELDS ne fonctionnent pas avec 24bpp. –

Questions connexes