Se connecter avec
S'enregistrer | Connectez-vous

GDI+ méthode MakeTransparent

Dernière réponse : dans Programmation

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

Autres pages sur : gdi methode maketransparent

Lassé par la pub ? Créez un compte

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

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

  1. /////////////////////////////////////////////////////////////////////////////
  2. //
  3. // Bitmap
  4. //
  5.  
  6. IDB_BITMAP1 BITMAP "emc_logo.bmp"
  7. IDB_BITMAP2 BITMAP "Airspeed_Needle.bmp"
  8. IDB_BITMAP3 BITMAP "Attitude_Card_Inside.bmp"
  9. IDB_BITMAP4 BITMAP "Needle16M.bmp"
  10. IDB_BITMAP5 BITMAP "C:\\Dev\\Attitude_Card_Inside.bmp"


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:
  1. image = new Bitmap(hInst, MAKEINTRESOURCEW(IDB_BITMAP5));

Je la transforme en 32 bits ARGB avec la méthode "Clone".

Merci de ton aide !!
Eric
Lassé par la pub ? Créez un compte