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 :

Optimisation usage graphics


Sujet :

Windows Forms

  1. #1
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut Optimisation usage graphics
    Bonjour

    J'ai mis un place une petite technique qui me permet de deplacer une image dans une autre image et d'afficher le tout dans un picturebox

    Le but in fine est de pouvoir composer une image en y ajoutant et positionnant une collection d'elements (images)

    Ci apres le coeur de la mecanique
    Ma question est de savoir si il n'y a pas moyen d'ameliorer l'intanciation du Graphics.FromImage() dans la fonction reposPrintPreview() qui doit etre asser lourde a mon avis

    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
     
        // ***********************************************************************************
        private void rePosPrintPreview()
        {
          Image Fond = (Image)BaseImage.Clone();
          Graphics grx = Graphics.FromImage(Fond);
          grx.DrawImage(legend, new Point(currentX, currentY));
          legrect = new Rectangle(currentX, currentY, legend.Width, legend.Height);
          printPreview.Image = Fond;
        }
        // ***********************************************************************************
        private void printPreview_MouseMove(object sender, MouseEventArgs e)
        {
          Point p = new Point(e.X, e.Y);
          Cursor = Cursors.Arrow;
          if (legrect.Contains(p))
          {
            Cursor = Cursors.Hand;
            if (e.Button == MouseButtons.Left) // Deplacement image
            {
              currentX += (e.X - BaseX);
              currentY += (e.Y - BaseY);
              rePosPrintPreview();
              BaseX = e.X;
              BaseY = e.Y;
     
            }
          }
        }
        // ***********************************************************************************
     
        private void printPreview_MouseDown(object sender, MouseEventArgs e)
        {
          Point p = new Point(e.X, e.Y);
          if (legrect.Contains(p))
          {
            BaseX = e.X;
            BaseY = e.Y;
          }
        }
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

  2. #2
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 195
    Points
    5 195
    Par défaut
    salut

    tu peux faire un graphics en membre privé de ta classe

    et quand tu veux redessiner, soit tu fais un clear (Color.Transparent) avant
    soit tu t'en fous car ton image "écrasera" l'ancienne
    The Monz, Toulouse
    Expertise dans la logistique et le développement pour
    plateforme .Net (Windows, Windows CE, Android)

  3. #3
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    Salut

    Ben non pas tout a fait justement !

    Parce que le
    Graphics.FromImage(Fond);

    Permet d'exploiter une image de base qui n'est pas vide !

    Je peux essayer d'avoir le Graphics en membre prive effectivement

    Mais ca va obliger alors de faire un DrawImage du fond ensuite un DrawImage de legend
    J'avais essayé ca avant et c'etait beaucoup plus lent que la version actuelle qui fait un .Clone

    Mais c'est vrai qu'avant je reéinstanciat aussi a chaque fois le graphics comme maintenant

    A ton avis quel serait le plus "leger" ?
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

  4. #4
    Expert confirmé

    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Septembre 2006
    Messages
    3 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Septembre 2006
    Messages : 3 580
    Points : 5 195
    Points
    5 195
    Par défaut
    beh faut tester

    En regle general, j'aurais tendance à dire que la création d'objet "coute" chere (surtout par rapport au GC)... maintenant, si il est plus rapide de faire un
    Graphics.FromImage() à chaque fois qu'un Graphics.drawImage(), alors le choix sera vite fait

    Utilise au pire un Stopwatcher pour regarder les différences de perfo
    (en release bien sur, car en debug... mouais)
    The Monz, Toulouse
    Expertise dans la logistique et le développement pour
    plateforme .Net (Windows, Windows CE, Android)

  5. #5
    Membre émérite
    Profil pro
    Mangeur de gauffre
    Inscrit en
    Octobre 2007
    Messages
    4 413
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Mangeur de gauffre

    Informations forums :
    Inscription : Octobre 2007
    Messages : 4 413
    Points : 2 498
    Points
    2 498
    Par défaut
    Merci

    En definitive je laisse le FromImage et Drawimage

    Le deplacement a l'ecran se fait de maniere tout a fait souple et non-sacadée ..
    « Ils ne savaient pas que c'était impossible, alors ils l'ont fait ». (Twain)

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

Discussions similaires

  1. Optimiser une partition pour un usage spécifique
    Par talvins dans le forum Administration système
    Réponses: 5
    Dernier message: 22/05/2012, 19h39
  2. Usage d'un clip sur un graphics
    Par olibara dans le forum C#
    Réponses: 4
    Dernier message: 25/02/2010, 12h26
  3. [WS 2003] Optimisation de l'usage
    Par kritopal dans le forum Windows Serveur
    Réponses: 1
    Dernier message: 10/11/2009, 11h12
  4. Optimisation d'usage d'un PEN
    Par olibara dans le forum Windows Forms
    Réponses: 2
    Dernier message: 18/04/2009, 08h52
  5. Graphics usage du TransformMatrix
    Par olibara dans le forum C#
    Réponses: 0
    Dernier message: 31/10/2008, 19h33

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