Problème couleur bitmap en API

Signaler
Messages postés
40
Date d'inscription
vendredi 14 mars 2003
Statut
Membre
Dernière intervention
21 avril 2007
-
Messages postés
1403
Date d'inscription
lundi 23 février 2004
Statut
Membre
Dernière intervention
11 janvier 2009
-
Bonjour,

J'ai une barre d'outils sur laquelle je veux faire apparaître des images personnalisées.

J'ai commencé avec un bouton et une image bitmap, pas de problèmes.

Mais maintenant que j'ai plusieurs boutons je charge plusieurs images depuis mon bitmap. J'utilise donc ImageList_LoadImage et j'envoie le message TB_SETIMAGELIST pour afficher toutes mes images.
Si j'ai bien toutes mes images ces dernières ont perdu des couleurs entre temps et je n'arrive pas à dire à Windows qu'il me charge toutes les profondeurs de couleurs.

Quelqu'un aurait-il une idée à me proposer ?

Merci d'avance

10 réponses

Messages postés
1403
Date d'inscription
lundi 23 février 2004
Statut
Membre
Dernière intervention
11 janvier 2009
3
Salut raoulman,

peux-tu mettre les lignes de code que tu as utilisées, c'est-à-dire la création de ton ImageList ?
As-tu essayer de mettre ImageList_AddMasked à la place de ImageList_LoadImage ?

YOYO, @+.
"L'intelligence c'est comme un parachute, quand on en n'a pas...on s'écrase !"
Messages postés
40
Date d'inscription
vendredi 14 mars 2003
Statut
Membre
Dernière intervention
21 avril 2007
1
Salut

Voilà la portion de code qui me concerne. Je charge mes ressources à partir d'une dll dont l'instance se nomme charger_dll. J'ai réduit le code à 2 boutons

---------------------------
image_boutons_barre_outils = (HBITMAP) LoadImage (charger_dll, MAKEINTRESOURCE (icon1), IMAGE_BITMAP, 32, 32, NULL);

TBADDBITMAP tbab;

TBBUTTON tbb[2];

INITCOMMONCONTROLSEX ();
INITCOMMONCONTROLSEX InitCtrlEx;
InitCtrlEx.dwSize = sizeof(INITCOMMONCONTROLSEX);
InitCtrlEx.dwICC = ICC_BAR_CLASSES;
InitCommonControlsEx(&InitCtrlEx);

barre_outils = CreateWindowEx(0, TOOLBARCLASSNAME, NULL, WS_CHILD | WS_VISIBLE | TBSTYLE_FLAT, 0, 0, 0, 0, handle_fenetre_retour, NULL, instance_barre_outils, NULL);

tbab.hInst = instance_barre_outils;
tbab.nID = (UINT) image_boutons_barre_outils;

liste_images_boutons = ImageList_LoadImage (charger_dll, MAKEINTRESOURCE (icon1), 32, 0, CLR_NONE, IMAGE_BITMAP, 0);

tbb[0].iBitmap = 0;
tbb[0].idCommand = id_relever;
tbb[0].fsState = TBSTATE_ENABLED;
tbb[0].fsStyle = TBSTYLE_BUTTON;
tbb[0].dwData = 0;
tbb[0].iString = SendMessage (barre_outils, TB_ADDSTRING, 0, (LPARAM) "Relever");

tbb[1].iBitmap = 1;
tbb[1].idCommand = id_sujets;
tbb[1].fsState = TBSTATE_ENABLED;
tbb[1].fsStyle = TBSTYLE_BUTTON;
tbb[1].dwData = 0;
tbb[1].iString = SendMessage (barre_outils, TB_ADDSTRING, 0, (LPARAM) "Sujets");

SendMessage (barre_outils, TB_SETIMAGELIST, 0, (LPARAM) liste_images_boutons);

SendMessage (barre_outils, TB_ADDBUTTONS, 2, (LPARAM) &tbb);

SendMessage (barre_outils, TB_AUTOSIZE, 0, 0);
Messages postés
1403
Date d'inscription
lundi 23 février 2004
Statut
Membre
Dernière intervention
11 janvier 2009
3
Je repose ma 2ème question, as-tu essayer de mettre ImageList_AddMasked à la place de ImageList_LoadImage ?

YOYO, @+.
"L'intelligence c'est comme un parachute, quand on en n'a pas...on s'écrase !"
Messages postés
40
Date d'inscription
vendredi 14 mars 2003
Statut
Membre
Dernière intervention
21 avril 2007
1
Désolé,

Oui j'ai essayé et cela n'a rien changé à moins qu'il ne faille mettre un paramètre dont j'ignore l'existence pour crMask
Messages postés
1403
Date d'inscription
lundi 23 février 2004
Statut
Membre
Dernière intervention
11 janvier 2009
3
Oui crMask correspond à la couleur de masque, c'est-à-dire que tous les pixels de ton image ayant la couleur de crMask seront transparents.
Autre chose, tu n'as pas utilisé ImageList_Create ?
En voici un exemple au cas où :
HIMAGELIST hImageList = ImageList_Create(16, 16, ILC_COLOR24 | ILC_MASK, 7, 0);

YOYO, @+.
"L'intelligence c'est comme un parachute, quand on en n'a pas...on s'écrase !"
Messages postés
40
Date d'inscription
vendredi 14 mars 2003
Statut
Membre
Dernière intervention
21 avril 2007
1
En utilisant ImageList_Create et ImageList_AddMasked je n'ai plus d'images. je dois utiliser ImageList_LoadImage
Messages postés
1403
Date d'inscription
lundi 23 février 2004
Statut
Membre
Dernière intervention
11 janvier 2009
3
ok bon courage alors !

YOYO, @+.
"L'intelligence c'est comme un parachute, quand on en n'a pas...on s'écrase !"
Messages postés
40
Date d'inscription
vendredi 14 mars 2003
Statut
Membre
Dernière intervention
21 avril 2007
1
Merci
Messages postés
40
Date d'inscription
vendredi 14 mars 2003
Statut
Membre
Dernière intervention
21 avril 2007
1
Après quelques recherches j'ai du me résoudre à faire des images en 256 couleurs car certaines fonctions comme LoadImage ne supporte pas les bitmaps 24 bits ou plus.

Si quelqu'un a envie de me contredire, qu'il ne se gêne pas, cela m'intéresse, surtout avec un petit code associé
Messages postés
1403
Date d'inscription
lundi 23 février 2004
Statut
Membre
Dernière intervention
11 janvier 2009
3
C'est pour ça que je te parlais d'utiliser ImageList_Create + ImageList_AddMasked ou ImageList_Add !!!
Cherche avec ça et je suis sûr que tu vas y arrivé, moi ça a bien marché donc...ya pas de raison !

YOYO, @+.
"L'intelligence c'est comme un parachute, quand on en n'a pas...on s'écrase !"