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

C# Discussion :

GETIMAGE..PUTIMAGE en C# ?


Sujet :

C#

  1. #1
    Membre régulier
    Inscrit en
    Septembre 2006
    Messages
    232
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 232
    Points : 94
    Points
    94
    Par défaut GETIMAGE..PUTIMAGE en C# ?
    Bonjour à tous

    je voudrais pouvoir déplacer une figure à l'aide de la souris sans effacer les autres figures dans un panel.

    j'ai essayé l'évènement "Paint" du panel pour redéssiner les autres figures mais celui ci réagi à chaque mouvement de la souris pour chaque déplacement d'un pixel à l'autre et donc le scintillement est vraiment visible.

    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
    34
    35
    36
    37
    38
    39
    40
     
    class GrphPannel :System.Windows.Forms.Panel
        {
     
            //je mémorise mes lignes dans : lines
            public List<GRcontrol.Line> lines = new List<GRcontrol.Line>();
            public Point start, end;
            public bool draw = false;
     
     
     
     
     
            protected override void OnPaint(PaintEventArgs e)
            {
     
     
     
                base.OnPaint(e);
                Graphics g = e.Graphics;
     
                foreach (GRcontrol.Line line in this.lines)// redessiner les lignes 
                {
                    g.DrawLine(Pens.Blue, line.Start, line.End);
     
                }
     
                if (this.draw)//si je dessine une nouvelle ligne c'est en rouge
                {
                    g.DrawLine(Pens.Red, this.start, this.end);
     
                }
     
     
     
     //c'est trops long.....je ne doit pas redéssiner sauf si je découvre une partie de mes dessins
     
     
            }
        }
    dans le cas d'un grand nombre de figures sur l'écran je crois qu'il faut copier l'image et puis la redéssine

    C# permet l'utilisation des pointeurs (pour plus de rapidité) comment faut t'il faire une chose comme : GETIMAGE.....PUTIMAGE ??

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    rien compris mais jette un oeil à drawing.bufferedgraphics
    tu dessines dedans comme sur un objet graphics et quand t'as besoin tu fais.render qui est instantanné
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Membre régulier
    Inscrit en
    Septembre 2006
    Messages
    232
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 232
    Points : 94
    Points
    94
    Par défaut
    je pense à ce qui se faisait en "turbo c" en trois étape :
    1. sauvegarde de l'image avec une foction Getimage(point1, point2);
    2. désinner ce que je veux dans la zone point1, point2;
    3. et puis récupérer l'ancienne image avec Putimage(point1,point2);


    je voudrais manipuler une partie du panel comme une image mais en utilisant les pointeurs ..en c#

    merci pour vos réponses et surtout critiques

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

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 154
    Points : 25 072
    Points
    25 072
    Par défaut
    si tu veux de la rapidité utilise les bufferedgraphics
    c'est en fait une image en mémoire et non sur un controle
    et quand tu veux l'afficher tu fais .render

    quand tu créé un bufferedgraphics il faut lui dire sur quoi il sera déssiner (bien qu'il soit possible de spécifier une nouvelle cible au moment du rendu)
    pour ce que tu veux faire il t'en faudrait donc 2

    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
      Imports System.Drawing
     
    //init
            Dim img As BufferedGraphics
            Dim dessin As BufferedGraphics
            img = BufferedGraphicsManager.Current.Allocate(dessin.Graphics, monpanel.clientrectangle)
            dessin = BufferedGraphicsManager.Current.Allocate(monpanel.CreateGraphics, monpanel.clientrectangle)
     
    // dessin initial qui ne changera pas
            img.Graphics.DrawLine() // et /ou drawcircle et/ou drawimage et/ou drawstring etc... (tout ce que graphics propose)
     
    // sur l'évènement paint
            img.Render() // dessine img sur l'objet dessin
            dessin.Graphics.DrawLine()
            dessin.Render() // dessine dessin sur le panel
    désolé c'est du vb mais ca doit ressembler en c#

    donc sur img tu fais des drawline ou des drawimage, ca sera l'image fixe

    puis tu réinitialise dessin avec img.render
    tu peux redéssiner des trucs en plus sans altérer img
    puis tu fais dessin.Render

    et c'est très performant
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  5. #5
    Membre régulier
    Inscrit en
    Septembre 2006
    Messages
    232
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 232
    Points : 94
    Points
    94
    Par défaut
    le double buffer me ressemble à ce que je crois être une bonne solution, je vais essayer.

    merci.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. probleme avec getDefaultToolkit().getImage
    Par riadhhwajdii dans le forum 2D
    Réponses: 8
    Dernier message: 19/10/2009, 18h14
  2. PDF::GetImages sur ActivePerl
    Par Premium dans le forum Modules
    Réponses: 4
    Dernier message: 03/12/2008, 22h21
  3. Gestion de getImage
    Par sarrasin.drums dans le forum Applets
    Réponses: 3
    Dernier message: 30/04/2008, 11h31
  4. problème de chemin avec getImage()
    Par L0007 dans le forum AWT/Swing
    Réponses: 5
    Dernier message: 06/02/2008, 12h23
  5. Java Applets - Méthode getImage
    Par pleblanc45 dans le forum Développement 2D, 3D et Jeux
    Réponses: 3
    Dernier message: 09/04/2007, 17h11

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