IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

Plusieurs images dans une PictureBox


Sujet :

Windows Forms

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    février 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : février 2009
    Messages : 17
    Points : 15
    Points
    15
    Par défaut Plusieurs images dans une PictureBox
    Je souhaiterais mettre plusieurs images dans une pictureBox (superposition de calque comme photoshop )

    Je ne trouve pas de méthode permettant de réaliser cette application existe t'il d'autre moyen ?

    De plus je souhaite utiliser la transparence des images (*.png)

    Merci d'avance de vos réponses

    Adrien

  2. #2
    Membre actif Avatar de DarkSeiryu
    Homme Profil pro
    Développeur Java
    Inscrit en
    janvier 2009
    Messages
    425
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : janvier 2009
    Messages : 425
    Points : 275
    Points
    275
    Par défaut
    Salut.

    D'après moi (mais j'suis encore un 'ti nOOb en C# xD), le mieux serait d'utiliser une ImageList (c'est un contrôle de VS) et de rajouter un bouton en dessous de ta PictureBox pour faire défiler les images contenues dans ton ImageList dans ta PictureBox.

    Voilà ce que j'ai testé (et qui fonctionne) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
            public static int i = 0;
     
            private void Form1_Load(object sender, EventArgs e)
            {
                pictureBox1.Image = imageList1.Images[i];
            }
     
            private void bt_suivante_Click(object sender, EventArgs e)
            {
                if (i != 6)
                {
                    i += 1;
                    pictureBox1.Image = imageList1.Images[i];
                }
                else
                {
                    MessageBox.Show("Impossible");
                }
            }
     
            private void bt_precedente_Click(object sender, EventArgs e)
            {
                if (i != 0)
                {
                    i -= 1;
                    pictureBox1.Image = imageList1.Images[i];
                }
                else
                {
                    MessageBox.Show("Impossible");
                }
            }
    7 images dans mon ImageList ^^

    Avec ça tu peux faire naviguer tes images comme tu veux.
    Après je sais pas si c'est ça te convient...

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    janvier 2008
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : janvier 2008
    Messages : 537
    Points : 359
    Points
    359
    Par défaut
    Utiliser la classe Graphics pour dessiner ton image dans le picture box serait une solution pour les superposer!

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    février 2009
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : février 2009
    Messages : 17
    Points : 15
    Points
    15
    Par défaut
    Merci de vos réponses !

    Pour DarkSeiryu j'utilise déjà une ImageList que je visualise dans ma PictureBox (par un moyen un peu détourner pour avoir une meilleur résolution) ainsi que le procédé avec les boutons (+ et -) pour faire défiler les images.(mais ton code m'aurait été bien utile lorsque que je commençais mon appli )

    Mon réel souci est de "superposer les images" dans mon cas faire un visage donc on choisi les cheveux puis je veux ajouter les yeux au dessus de cette image.

    la solution de NejNej m'interesse fortement mais je veux bien un peu plus de précision quel est la différence ci on utilise la méthode: .draw() ?

    ( Peut-on déplacer la dernière image dessiner par draw avec la souris ?)

    Merci de vos réponses

    Adrien

  5. #5
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    avril 2007
    Messages
    13 953
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : avril 2007
    Messages : 13 953
    Points : 24 634
    Points
    24 634
    Par défaut
    code vb.net::


    dim g as graphics = picturebox.creategraphics
    g.Drawimage(image1)
    g.Drawimage(image2)

    à mettre dans l'evènement paint du picturebox sinon ca s'efface dès que windows demande à l'appli de se redessiner

    image 2 est ainsi dessiné sur image 1, avec gestion de la transparence sur des png par exemple


    pour que l'image 2 bouge avec la souris, c'est un peu plus complexe, il faut passer par un bufferedgraphics qui améliore les performances
    drawimage a une surcharge qui permet de définir le placement de l'image
    et il faut sur mousemove gérer le déplacement, avec à chaque fois effacer, redessiner image1, puis image2 à l'endroit de la souris
    de pas le faire à chaque mousemove, ca risque d'etre lent, mais le faire toutes les 50ms par exemple
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  6. #6
    Membre du Club
    Inscrit en
    mai 2006
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : mai 2006
    Messages : 98
    Points : 65
    Points
    65
    Par défaut
    Merci, tout marche pour les superposition des images, par contre le soucis qu'on a avec Adien.Fanget,
    c'est que lors d'un rafraichissement de la fenetre (exemple, reduction de la fenetre ds la barre demarrer) on perd ce qu'on a dessiné sur le Graphics.

    Est ce que quelqu'un sait d'ou cela peut il venir.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    janvier 2008
    Messages
    537
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : janvier 2008
    Messages : 537
    Points : 359
    Points
    359
    Par défaut
    Il me semble que sperot51 l'explique non?
    Vous avez essayé ce qu'il dit?

    edition :

    sinon juste une idée , il est peut être possible de dessiner dans un objet Image puis d'utiliser la propriété .Image de la combobox!

  8. #8
    Expert éminent sénior Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    avril 2007
    Messages
    13 953
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : avril 2007
    Messages : 13 953
    Points : 24 634
    Points
    24 634
    Par défaut
    plusieurs solutions

    soit dessiner dans l'évènement paint, mais celui ci étant appelé souvent, c'est pas le plus performant

    soit utiliser un bufferedgraphics, dessiner quand on veut et dans l'evenement paint faire monbufferedgraphics.render(e.graphics)
    (render prend moins d'une milliseconde)

    soit dessiner quand on veut, mettre le dessin dans une variable bitmap est l'attribué au picturebox, exemple ci après : (code vb, désolé)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    dim b as new bitmap(picturebox.width,picturebox.height)
    dim g as graphics = graphics.fromimage(b)
    /// dessin sur g
    monpicturtebox.image = b
    tout ce qui est ensuite dessiné sur g l'est aussi sur b
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  9. #9
    Membre du Club
    Inscrit en
    mai 2006
    Messages
    98
    Détails du profil
    Informations forums :
    Inscription : mai 2006
    Messages : 98
    Points : 65
    Points
    65
    Par défaut
    Je regarde ca de plus pres et je vous tiens au courant

Discussions similaires

  1. [CS3] Intégrer plusieurs images dans une div
    Par zonessai dans le forum Dreamweaver
    Réponses: 0
    Dernier message: 18/03/2009, 20h38
  2. affichage de plusieurs images dans une même figure
    Par kawther dans le forum Interfaces Graphiques
    Réponses: 3
    Dernier message: 20/02/2009, 18h45
  3. [Débutant] comment afficher plusieurs images dans une seule interface ?
    Par youssa81 dans le forum Interfaces Graphiques
    Réponses: 3
    Dernier message: 06/02/2009, 00h36
  4. [MySQL] Stocker plusieurs images dans une db
    Par innova dans le forum PHP & Base de données
    Réponses: 8
    Dernier message: 27/12/2006, 14h04
  5. [C#]Modifier l'image dans une PictureBox depuis un flux http
    Par f.colo dans le forum Windows Forms
    Réponses: 1
    Dernier message: 14/02/2006, 09h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo