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 :

Graphics - Dessiner sur une image


Sujet :

C#

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2005
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 77
    Points : 83
    Points
    83
    Par défaut Graphics - Dessiner sur une image
    Bonjour à tous,

    Voila je souhaite dessiner sur une image. C'est la première fois que je mets le pied dans ce domaine (plutot habituer a sql and co).

    J'ai donc regarder 2, 3 truc sur le net... Mais ... (oui y a toujours un mais ...)

    J'utilise le code suivant :

    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
    public Form1()
            {
                InitializeComponent();
     
                bmp = new Bitmap(pictureBox1.Width, pictureBox1.Height);
                //bmp2 = new Bitmap(pictureBox2.Width, pictureBox2.Height);
                des = Graphics.FromImage(bmp);
                des2 = pictureBox2.CreateGraphics();
     
            }
     
            private void button1_Click(object sender, EventArgs e)
            {
                //routine dessin
                des.FillRectangle(new SolidBrush(Color.DarkCyan), new Rectangle(new Point(10, 10), new Size(50, 50)));
                //
                pictureBox1.Image = bmp;
            }
     
            private void button2_Click(object sender, EventArgs e)
            {
                //routine dessin
                des2.FillRectangle(new SolidBrush(Color.DarkCyan), new Rectangle(new Point(10, 10), new Size(50, 50)));
                //
                //pictureBox2.Image = bmp2;
            }
    Dans le cas de la picture box 1, je ne peux pas définir d'arriere plan à ma picturebox puisque la méthode la remplace.

    Dans le cas de la picture box 2, je peux définir un arriere plan et l'élément graphic va venir se positionner dessus. Ce que je souhaite!

    Mais le problème, c'est lors d'un déplacement de la fenetre hors écran, ou d'une redirection, l'élément graphic de la picture box 1 persiste, alors que l'élément de la picture box 2 s'efface..

    Je vous accorde que c'est sans doute une question maternelle 2eme année, mais comment déssiner sur mon arriere plan sans que l'élement graphique s'efface lors de manipulation de la fenêtre ???

    Merci d'avance.

  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 194
    Points
    5 194
    Par défaut
    salut

    Réponse : En faisant le draw dans le OnPaint() du composant

    Réponse 2 : Ce genre de question étant "souvent" posée sur ce forum, je t'invite à faire une recherche qui t'expliquera toutes les bonnes pratiques à suivre pour réaliser ce que tu souhaites faire. Il me semble même qu'un tutoriel sur les UserControl explicite l'ensemble des informations dont tu as besoin pour ta réalisation !

  3. #3
    Membre régulier
    Inscrit en
    Septembre 2007
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 114
    Points : 120
    Points
    120
    Par défaut
    Ou alors on recuperant l'evenement Paint puisque tu est dans une form et non pas dans le composant. Et surtout utiliser le Graphics fourni par l'argument de la fonction.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    protected override void OnPaint(PaintEventArgs e) 
    { 
        // Recupére le graphics
        Graphics gfx = e.Graphics;
    }

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    // Normallement generer par le designer
    pictureBox1.Paint +=  new System.Windows.Forms.PaintEventHandler(this.pictureBox1_Paint);
     
    // Recuperation de l'evenement
    protected override void PictureBox1_Paint(Object Sender,PaintEventArgs e) 
    { 
        // Recupére le graphics
        Graphics gfx = e.Graphics;
    }
    Evite aussi de declarer un objet graphics comme field de la classe.

    En GDI+ tes meilleurs amis sont Using et Dispose qui permettent de liberer les ressources dont on a pas besoin.

    Ps: Pas besoi de faire gfx.dispose(), il le sera automatiquement vu qu'il est declarer dans la fonction.

  4. #4
    Membre régulier
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2005
    Messages
    77
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 77
    Points : 83
    Points
    83
    Par défaut
    atchoum ... .. . non je plaisante.

    Je vais voir ça.

    Ce que je souhaite au final c juste rajouter un point sur une image existante.. une apply qui va en gros apres une recherche nous montrer l'emplacement de l'élément sur une image(plan). genre je cherche X, et ça nous montre sur notre plan(image) ou est placé l'élément X.

    Y a plus simple, plus rapide pour ça ? ou non ...

    __________________________

    EDIT : En faite c'est bon. Merci pour votre aide.

    Je note en résolu.

  5. #5
    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 194
    Points
    5 194
    Par défaut
    salut

    dessiner sur une bitmap et y mettre un point, il faut grosso modo, 15 minutes pour le faire

  6. #6
    Membre régulier
    Inscrit en
    Septembre 2007
    Messages
    114
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 114
    Points : 120
    Points
    120
    Par défaut
    dessiner sur une bitmap et y mettre un point, il faut grosso modo, 15 minutes pour le faire
    Tu prend en compte le temps de faire le café? et de le boire? :p


    Si c'est pour mettre un seul point ( ou une dizaine , mais pas genre 10000)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Bitmap img = new Bitmap("c:\...\img.bmp");
    img.SetPixel ( 100,50,Color.Red);
    C'est lent relativement à la méthode du Lock/Unclok mais vu que le nombre de points est limité, ça sera fait en un centième de seconde

  7. #7
    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 194
    Points
    5 194
    Par défaut
    salut

    si tu veux aller vite avec 10000 points, tu bannis SetPixel et tu passes directement par du code unsafe ou tu pourras attaquer tes points directement dans le tableau de point

    On trouve pas mal d'exemple de traitement d'image sur le net, y compris sur codeproject.com qui montrer la technique simple pour accéder aux données "brutes" de l'image !!!

    Parce qu'avec SetPixel, c'est certes simple mais ca "rame" de folie !!!

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

Discussions similaires

  1. comment dessiner sur une image
    Par baracouda dans le forum Graphisme
    Réponses: 2
    Dernier message: 26/05/2006, 00h21
  2. Dessiner sur une image
    Par cquadjul dans le forum C++Builder
    Réponses: 2
    Dernier message: 19/04/2006, 10h44
  3. Dessiner sur une image
    Par alex6891 dans le forum Java ME
    Réponses: 1
    Dernier message: 16/04/2006, 02h45
  4. Déplacer, zoomer, dessiner (sur) une image
    Par charlito dans le forum 2D
    Réponses: 4
    Dernier message: 22/02/2006, 01h58
  5. [Servlet] [Image] Dessiner sur une image
    Par gaia_dev dans le forum 2D
    Réponses: 5
    Dernier message: 01/09/2004, 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