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 :

dessiner une ligne


Sujet :

C#

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 102
    Points : 54
    Points
    54
    Par défaut dessiner une ligne
    bonjour,
    j'aimerais dessiner une ligne en c# sur une image dans un picturebox et j'ai comme données le point de départ et l'angle comment je fais merci.

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    La méthode Graphics.DrawLine permet de dessiner une ligne, connaissant ses points de départ et d'arrivée

    Citation Envoyé par sali lala Voir le message
    j'ai comme données le point de départ et l'angle
    Ce n'est pas suffisant comme données... il faut aussi la longeur (ou le point d'arrivée, mais dans ce cas l'angle ne sert à rien)

    A partir du point de départ, de l'angle et de la longueur, tu peux calculer le point d'arrivée avec les fonctions trigonométriques :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    x2 = x1 + longueur * Math.Cos(angle);
    y2 = y1 - longueur * Math.Sin(angle);
    (sauf erreur de ma part... ça fait un moment que je n'ai pas fait de maths )

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 102
    Points : 54
    Points
    54
    Par défaut
    merci beaucoup pour ta réponse mais je pense que y2=y1+langeur*cos(alpha)
    et aussi j'ai pas compris comment accède au picturebox pour dessiner cette ligne
    Merci

  4. #4
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 494
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 494
    Points : 3 129
    Points
    3 129
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            private void Form1_Paint(object sender, PaintEventArgs e)
            {
                e.Graphics.DrawLine(new Pen(Brushes.Black), x1, y1, x2, y2);
            }

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Citation Envoyé par sali lala Voir le message
    merci beaucoup pour ta réponse mais je pense que y2=y1+langeur*cos(alpha)
    Et non, il y a un piège
    Dans un repère "classique", l'axe des y est orienté du bas vers le haut, mais en Windows Forms (et GDI+) c'est le contraire : le point (0,0) correspond au coin en haut à gauche, et non en bas à gauche.
    Et pour l'axe vertical, c'est bien sinus et non cosinus, en supposant bien sûr que l'angle soit par rapport à l'horizontal, dans le sens trigonométrique direct (inverse des aiguilles d'une montre)

    Citation Envoyé par sali lala Voir le message
    et aussi j'ai pas compris comment accède au picturebox pour dessiner cette ligne
    Merci
    Si tu veux dessiner sur la PictureBox, le mieux est sans doute d'utiliser l'évènement Paint, comme dans l'exemple de Papy214 juste au dessus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
            private void pictureBox1_Paint(object sender, PaintEventArgs e)
            {
                e.Graphics.DrawLine(Pens.Black, x1, y1, x2, y2);
            }
    Si tu veux dessiner sur l'image elle-même (de façon à pouvoir enregistrer l'image modifiée si besoin), il faut obtenir l'objet Graphics avec la méthode FromImage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
            private void button1_Click(object sender, EventArgs e)
            {
                Graphics g = Graphics.FromImage(pictureBox1.Image);
                g.DrawLine(Pens.Black, x1, y1, x2, y2);
            }

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 102
    Points : 54
    Points
    54
    Par défaut
    Merci a votre réponse tomlev et Papy214 mais quand j'ai utilise ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
            private void button1_Click(object sender, EventArgs e)
            {
                Graphics g = Graphics.FromImage(pictureBox1.Image);
                g.DrawLine(Pens.Black, x1, y1, x2, y2);
            }
    il m'affiche cette erreur
    Un objet Graphics ne peut pas être créé à partir d'une image au format pixel indexé.
    sa veut dire quoi?!!

  7. #7
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 494
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 494
    Points : 3 129
    Points
    3 129
    Par défaut
    http://msdn.microsoft.com/fr-fr/libr...fromimage.aspx

    ça vient du format de l'image. Essaye de convertir ton image dans un format non contenu dans la liste indiquée sur l'URL ci-dessus.

    Voilà un code qui fonctionne très bien sur un jpg

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
                Graphics g = Graphics.FromImage(pictureBox1.Image);
                g.DrawLine(Pens.Black, 10, 10, 50, 150);
                pictureBox1.Refresh();
    sur un jpg de 16,7 Millions de couleurs (24 BitsPerPixel)

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 102
    Points : 54
    Points
    54
    Par défaut
    moi jai des images BMP c sa qui pose problem?!!

  9. #9
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 494
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 494
    Points : 3 129
    Points
    3 129
    Par défaut
    par forcément, j'ai un bmp en 24bpp ici, et ça fonctionne sans problème.

    Mais si je convertis l'image en 256 couleurs, j'ai la même erreur.

    Avec un utilitaire comme IrfanView, tu peux augmenter le nombre de couleurs de ton bmp. Passe ton image en 16 millions de couleurs et ça marchera.

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 102
    Points : 54
    Points
    54
    Par défaut
    jai telecharger ce logiciel mais je sais pas comment l'utiliser pour la conversion (c vrai il m'affiche a que les images BMP que jai sont 8bpp)

  11. #11
    Membre expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2007
    Messages
    3 494
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2007
    Messages : 3 494
    Points : 3 129
    Points
    3 129
    Par défaut
    ouvrir l'image avec, puis dans le menu Image, choisir "augmenter la profondeur de couleurs"

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 102
    Points : 54
    Points
    54
    Par défaut
    Merci beaucoup a vous tous

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

Discussions similaires

  1. Dessiner une ligne
    Par hbzied dans le forum Interfaces Graphiques en Java
    Réponses: 4
    Dernier message: 26/04/2006, 20h01
  2. Comment dessiner une ligne dans un Chart ?
    Par libititi dans le forum Composants VCL
    Réponses: 3
    Dernier message: 16/06/2005, 14h56
  3. [Image]Dessiner une ligne en dynamique
    Par Bugmaster dans le forum AWT/Swing
    Réponses: 8
    Dernier message: 02/08/2004, 11h56
  4. Dessiner une ligne
    Par Bugmaster dans le forum 2D
    Réponses: 6
    Dernier message: 29/07/2004, 08h36
  5. Dessiner une ligne dans un cube transparent ?
    Par Muetdhiver dans le forum OpenGL
    Réponses: 4
    Dernier message: 04/05/2004, 11h06

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