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.
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.
La méthode Graphics.DrawLine permet de dessiner une ligne, connaissant ses points de départ et d'arrivée
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 :
(sauf erreur de ma part... ça fait un moment que je n'ai pas fait de maths )
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);
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
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); }
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)
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 :
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 private void pictureBox1_Paint(object sender, PaintEventArgs e) { e.Graphics.DrawLine(Pens.Black, x1, y1, x2, y2); }
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); }
Merci a votre réponse tomlev et Papy214 mais quand j'ai utilise ce code
il m'affiche cette erreur
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); }sa veut dire quoi?!!Un objet Graphics ne peut pas être créé à partir d'une image au format pixel indexé.
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
sur un jpg de 16,7 Millions de couleurs (24 BitsPerPixel)
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();
moi jai des images BMP c sa qui pose problem?!!
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.
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)
ouvrir l'image avec, puis dans le menu Image, choisir "augmenter la profondeur de couleurs"
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager