Partage
  • Partager sur Facebook
  • Partager sur Twitter

Transparence des icônes dans un menu

HBITMAP et compagnie

    14 mars 2011 à 1:42:10

    Bonjour!

    Je ne savais pas trop où placer cette question, puisqu'elle concerne en fait l'API Windows.

    Je programme en PureBasic, et j'inclus dans mon exécutable les icônes au format PNG pour la barre d'outils principale et pour les divers boutons images.
    Le problème, c'est que si l'on veux inclure des icônes dans le menu, celui-ci devient "à la XP". Je veux dire par là qu'il ne garde pas le style Windows 7, il retourne au vieux style bleu moche. Ceci vient du fait que c'est un menu ... "personnalisé" si on peut dire. De toute façon, là n'est pas le problème.
    Je fais donc un menu normal, sans icônes, avec le style Windows 7. PureBasic intègre toutes les fonctions API de Windows, j'utilise donc la fonction SetMenuItemBitmaps et lui envoie l'ID de mon menu et les divers paramètres. Tout fonctionne, j'ai mon icône dans le menu à la bonne position.

    Malheureusement, si j'utilise une image au format PNG comme icône, bien que ça fonctionne et qu'elle soit transparente, j'obtiens quelques "bizarreries" comme d'étranges couleurs. Tandis que si j'utilise un fichier BMP, comme il devrait être, j'obtiens une belle icône, mais pas transparente. J'ai un gros fond blanc dégueulasse autour de l'icône.

    Ma question, est-il possible d'utiliser un PNG comme icône dans un tel menu, et si c'est le cas, si cela inclus la transparence et en gardant la compatibilité avec d'autres versions de Windows(Au minimum XP)?
    Sinon, y a-t-il une façon de rendre transparent mon icône BMP dans le menu?

    Merci d'avance.
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      15 mars 2011 à 22:44:19

      Ha tu essayés avec d'autre format d'image qui supporte la transparence que le .png ?
      • Partager sur Facebook
      • Partager sur Twitter
        16 mars 2011 à 1:09:22

        Il y a différents formats gérant le canal alpha, comme tiff, gif ou svg. Mais apparemment tu as besoin d'un Bitmap. Ceux-ci peuvent gérer la transparence, le plus simple je pense ça serait d'ouvrir ton png avec GIMP et enregistrer sous au format bmp et la transparence sera sauvegardée. Sinon j'ai trouvé un snippet permettant de passer toute la partie blanche de ton image en transparent :
        Bitmap bmp = Image.FromFile(sourceFilename) as Bitmap;
        bmp.MakeTransparent(Color.White);
        bmp.Save(targetFilename, ImageFormat.Bmp);
        


        Dim bmp As Bitmap = TryCast(Image.FromFile(sourceFilename), Bitmap)
        bmp.MakeTransparent(Color.White)
        bmp.Save(targetFilename, ImageFormat.Bmp)
        


        L'inconvénient c'est que partout ou tu auras du blanc sera en transparent, même si ça fait partie de l'image.
        • Partager sur Facebook
        • Partager sur Twitter
          16 mars 2011 à 1:47:28

          Merci beaucoup de vos réponses.
          L'inconvénient, c'est que je doit soit utiliser un BMP, soit un PNG. D'autres formats seraient incompatible avec certains composants de librairie que j'ai fabriqué à main. Je vais tenter le coup de Gimp, et je posterai mon résultat d'ici demain. ;)
          Également, je ne suis pas certain de pouvoir accéder à ces classes. Ce ne serais pas des classes réservées à la plateforme DotNet?
          • Partager sur Facebook
          • Partager sur Twitter
            16 mars 2011 à 1:55:26

            Oui ce sont des classes disponibles à partir du framework .net 1.1
            • Partager sur Facebook
            • Partager sur Twitter

            Transparence des icônes dans un menu

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown