GDI+ méthode MakeTransparent

Rocky75

Expert
J'ai lu sur la doc MSDN que GDI+ dispose d'une méthode MakeTransparent (classe Bitmap) pour rendre transparents certains pixels d'une bitmap. J'en ai fort besoin, mais je n'ai pas cette méthode dans ma classe Bitmap !!
Je suppose que j'ai une trop vieille version de la lib GDI+ (je suis en C++ et j'utilise Visual Studio 2003), mais si c'est le cas, je ne sais pas comment récupérer une version plus récente.

Toute aide est la bienvenue...
Merci !!

Eric
 

zeb

Modérateur
Donne-nous ce lien sur la doc MSDN.

Si tu lis l'aide sur .NET et que tu utilises GDI+, tu risques de ne pas trouver ton bonheur.
 

Rocky75

Expert
Effectivement, je lisais la doc de .Net, d'où l'erreur. Je croyais qu'il y avait équivalence entre System.Drawing et l'API GDI+ mais ce n'est pas le cas.
Pas grave, car j'ai résolu le problème en faisant moi-même cette fonction: je lis tous les pixels, et pour ceux qui sont noirs, je mets l'alpha à 0. Ca marche bien, sauf que j'ai un autre problème:
- Quand je lis ma bitmap depuis un fichier:
image = new Bitmap(L"MonImage.bmp");
Ca marche très bien. Mais en fait je préfère prendre la bitmap sous forme de ressource.
- Pour lire une ressource bitmap:
image = new Bitmap(hInst, MAKEINTRESOURCEW(IDB_BITMAP5));
Ca marche aussi, sauf que le bitmap n'a pas le même PixelFormat, si bien qu'il est impossible de gérer la transparence dedans. Je n'arrive pas à mettre l'alpha à 0 dans ce cas.

Je ne comprends pas car il s'agit bel et bien du même fichier .bmp à l'origine. Incroyable...
Si vous avez une idée, je suis preneur ;-)

Eric
 

zeb

Modérateur
N'hésite pas à utiliser la balise [cpp] pour présenter ton code, même pour une ligne.

Tu cites la restitution. Comment s'est faite la mise en ressource ?
 

Rocky75

Expert
La resource est décrite dans le fichier .rc comme suit, avec les autres bitmaps:

[cpp]/////////////////////////////////////////////////////////////////////////////
//
// Bitmap
//

IDB_BITMAP1 BITMAP "emc_logo.bmp"
IDB_BITMAP2 BITMAP "Airspeed_Needle.bmp"
IDB_BITMAP3 BITMAP "Attitude_Card_Inside.bmp"
IDB_BITMAP4 BITMAP "Needle16M.bmp"
IDB_BITMAP5 BITMAP "C:\\Dev\\Attitude_Card_Inside.bmp"
[/cpp]

D'ailleurs ce n'est pas moi qui l'ai fait, j'ai intégré la bitmap parmi les autres resources à partir de Visual Studio, en faisant "Add Resource", sélection du type "Bitmap", puis "Import..." et sélection du fichier .bmp de l'image.

Mais j'ai trouvé une solution. Ce n'est peut-être pas ce qu'il y a de plus élégant, mais ça marche. Juste après avoir lu la resource avec:
[cpp]image = new Bitmap(hInst, MAKEINTRESOURCEW(IDB_BITMAP5)); [/cpp]
Je la transforme en 32 bits ARGB avec la méthode "Clone".

Merci de ton aide !!
Eric
 

Rocky75

Expert
Oui, ça marche, mais j'aimerais quand même bien comprendre pourquoi ça merdait avant.
Un jour peut-être...

Eric
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 134
Messages
6 718 062
Membres
1 586 394
Dernier membre
Manoushk
Partager cette page
Haut