none
Transparence de PictureBox RRS feed

  • Question

  • Bonjour,

    J'aimerais savoir s'il est possible de rendre le fond d'une picturebox transparente, pour que si 2 picturebox avec chacune une image transparente se chevauchent, on puisse apercevoir les 2 images.

    Merci d'avance.

    samedi 5 mai 2012 17:33

Réponses

Toutes les réponses

  • Salut LancelotLeVrai,

    J'ai exactement le même problème que toi. Car je suis en train de créez un éditeur de dessin ou l'utilisateur peut ajouter des images dans une zone de dessin(panel) et a chaque fois que la personne ajoute une image le programme créez une picturebox dans mon panel. Mais si il y a plusieurs picturebox avec chacune une image la transparence est pas géré entre elle. Comment faire ?

    voila les technique que j'ai déjà essayer:

    Backcolor = transparent.
    la fonction MakeTransparent
    et la fonction getpixel je crois, elle permet de dire que la couleur du pixel en haut a gauche de l'image dans la pictureBox est égal a transparent. Mais mon image disparait complétement a cause de ceci.

    Autrement toute les images que j'utilise sont en .gif avec un fond transparent.

    Après certaine recherche, si j'ai bien tout compris la transparence est seulement gérer avec l'élément parent de la picturebox donc dans ce cas la mon panel. Donc comment faire pour que ce soit aussi entre les élément enfants ? Ou quel objet autre que des picturebox permettrai ceci ?

    Merci d'avance pour vos réponse.

    Et j’espère que je t'ai a peine plus renseigner LancelotLeVrai malgré que je n'ai pas encore la réponse a ton problème.


    • Modifié Boggarak samedi 5 mai 2012 22:29
    samedi 5 mai 2012 21:20
    • Proposé comme réponse Boggarak mardi 8 mai 2012 20:37
    • Non proposé comme réponse Boggarak mercredi 9 mai 2012 06:56
    • Marqué comme réponse Ciprian Duduiala jeudi 10 mai 2012 08:35
    mardi 8 mai 2012 10:11
  • Merci beaucoup pour tout ce lien. Je pense bien que c'est un problème qui revient souvent donc je m'excuse d'avoir faire un post en plus, mais je désespérais après 3 fois 8 heure de recherches la dessus.

    Voici le lien qui ma servi: http://social.msdn.microsoft.com/Forums/fr/vbasicfr/thread/2730145e-4b48-4f34-85f8-5fb27022018d

    Combiner le juste avec celui-ci pour avoir le code en C#: http://www.developerfusion.com/tools/convert/vb-to-csharp/

    Merci encore à toi Cipri

    mardi 8 mai 2012 20:40
  • Super! Merci pour les liens.

    Et donc voila la fonction qui permet de rendre une picturebox transparente:

    public static System.Drawing.Drawing2D.GraphicsPath Transparent(Image im)
            {
                int x;
                int y;
                Bitmap bmp = new Bitmap(im);
                System.Drawing.Drawing2D.GraphicsPath gp = new System.Drawing.Drawing2D.GraphicsPath();
                Color mask = bmp.GetPixel(0, 0);
    
                //parcours de tous les pixels de l'image
                for (x = 0; x <= bmp.Width - 1; x++)
                {
                    for (y = 0; y <= bmp.Height - 1; y++)
                    {
                        //si la couleur du pixel donné n'est pas égal à celle du pixel par défaut, transparent
                        if (!bmp.GetPixel(x, y).Equals(mask))
                        {
                            //on ajoute un rectangle à notre forme (graphicspath)
                            gp.AddRectangle(new Rectangle(x, y, 1, 1));
                        }
                    }
                }
                //on libère le bitmap et retourne la nouvelle forme graphique
                bmp.Dispose();
                return gp;
    
            }
    
                //Dans l'événement clique du panel
               pic.Region = new System.Drawing.Region(Transparent(pic.Image));
               pic.BringToFront();
    
    Merci encore pour les liens, j’espère que cette article puisse aider tout les personnes qui se posent des questions sur la transparence des "PictureBox" et d'autres contrôles.
     
    mercredi 9 mai 2012 06:35
  • Grâce a cette solution la transparence est géré mais il y a un autre problème qui apparait.

    A chaque fois que je clique sur ma zone de dessin(panel) j'ajoute une nouvelle picturebox avec l'événement MouseDown et MouseUp.

    Le problème c'est que si je clique sur ma picturebox a un endroit ou il y a de la transparence ceci me déclenche pas les événement de ma picturebox mais l'événement clique de mon panel en arrière fond. Donc comment faire pour que la transparence soit gérer, et quand je clique sur un pixel transparent de ma picturebox ceci exécute les événement de la picturebox et pas de l'élément qui est derrière ?

    mercredi 9 mai 2012 06:55
  • Bonjour,

    Bon.. je ne sais pas d’où vient votre problème et je n’ai pas trouvé grand-chose sur le sujet. La seule idée que j’ai est de gérer l’évènement click sur une PictureBox d’une manière personnalisée : déterminez quel control est on face, en utilisant, par exemple, la méthode ControlCollection.GetChildIndex en commination avec la propriété Controls de votre forme (voir cet exemple), aussi que Mouse.Position pour déterminer si le clic est à l’intérieur de votre control et puis appliquez les actions pour le control PictureBox en question.

    Bonne journée,

    Cipri


    mercredi 9 mai 2012 14:16
  • Bonjour,

    J'ai réussi a régler mon problème en testant si la position de la souris était dans la zone de ma picturebox.

    Merci beaucoup.

    lundi 14 mai 2012 08:22