Dessiner un graphics sur une image contenue dans une pictureBox

Résolu
godefrw Messages postés 56 Date d'inscription lundi 13 septembre 2004 Statut Membre Dernière intervention 20 mars 2006 - 5 oct. 2004 à 16:48
godefrw Messages postés 56 Date d'inscription lundi 13 septembre 2004 Statut Membre Dernière intervention 20 mars 2006 - 12 oct. 2004 à 10:20
Bonjour, je cherche à afficher un objet Graphics (sur lequel j'ai dessiner des formes rectangles, rond etc) par dessus une image. Mon image est contenu dans un picutureBox.

Je procède de la manière suivante:
_créatioon du pictureBox.

_creation d'un bitmap à partir d'une image
Bitmap objet = new Bitmap(thisform.Image);

_creation du graphics à partir de mon bitmap
g = Graphics.FromImage(objet);

_dessin sur le graphique

_ajout de mon bitmap comme image de la pictureBox

J'ai un problème car les formes ne semblent pas être dessinées à l'échelle de la pictureBox et avec les coordonnées calculer par rapport à la picturebox.
Si quelqu'un pouvait me filer un tuyaux...

Ced

8 réponses

cs_coq Messages postés 6350 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
11 oct. 2004 à 18:15
ah

bon un petit exemple vaut mieux qu'un long discours, je crois que ça correspond à ce que tu veux faire :
private Point m_debut_rect;

private void pictureBox_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
m_debut_rect = new Point(e.X, e.Y);
}

private void pictureBox_MouseUp(object sender, System.Windows.Forms.MouseEventArgs e)
{
Bitmap bmp = new Bitmap(pictureBox.Image, pictureBox.Size);
Graphics g = Graphics.FromImage(bmp);
Rectangle rectangle = Rectangle.FromLTRB(m_debut_rect.X, m_debut_rect.Y, e.X, e.Y);
g.DrawRectangle(Pens.Black, rectangle);
pictureBox.Image = bmp;
}


bon ce code ne dessinera le rectangle que si l'utilisateur "dessine" dans le sens "selection point haut-gauche" puis "selection point bas-droit" mais je te laisse regler ce léger détail :)

Cocoricoooooooo !!!!
coq
MVP Visual C#
3
gg00xiv Messages postés 656 Date d'inscription mercredi 22 août 2001 Statut Membre Dernière intervention 11 mars 2005 13
5 oct. 2004 à 19:10
Regarde du côté de la propriété SizeMode de ta PictureBox.

Membre du Labo .NET
gg00xiv's Blog
0
godefrw Messages postés 56 Date d'inscription lundi 13 septembre 2004 Statut Membre Dernière intervention 20 mars 2006
6 oct. 2004 à 11:04
Tuc as raison le problème vient de là. J'avais mis à size mode la valeur stretchImage. J'aimerais bien pouvoir malgré tout garder cette proprité car je peux manipuler des images de taille différente et je veux que mon application affiche l'image en eentier quelque soit la taille de la fenêtre. Sinon ça fonctionne convenablement au niveau du dessin avec les valeurs normal et autosize.
Ced
0
cs_coq Messages postés 6350 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
6 oct. 2004 à 18:28
dans ce cas là il va falloir que tu calcules tes coordonnées de dessin suivant les dimensions du picturebox

sinon une autre solution :
tu crée un Bitmap avec les mêmes dimensions que ton image
tu crée un Graphics dessus
tu dessines l'image sur le Bitmap
tu fais tes autres dessins (donc avec la taille réelle de l'image)
puis tu affectes le Bitmap au PictureBox
ainsi tes dessins "profiteront" aussi de l'agrandissement ou de la reduction

Cocoricoooooooo !!!!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
godefrw Messages postés 56 Date d'inscription lundi 13 septembre 2004 Statut Membre Dernière intervention 20 mars 2006
11 oct. 2004 à 11:22
Peux-tu me donner quelques précisions?
J'essaye de faire la deuxième méthode que tu m'as donnée mais je bloque sur le dessin de l'image sur le bitmap:
voilà mon code
Bitmap objet = new Bitmap(MyImage.Width, MyImage.Height);
g = Graphics.FromImage(objet);

J'essaye ensuite d'utiliser la fonction drawImage sur le Graphics mais il existe 30 surcharges de cette fonction; il semble à chaque qu'il faille préciser la taille ou le point supérieur gauche. J'en est essayé quelques (dont g.drawImage(MyImage, ma_pictureBox.loction.x, ma_pictureBox.location0.y) )qui ne m'ont pas donné de résultats intéressants. A quoi pensais-tu?

Ced
0
cs_coq Messages postés 6350 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
11 oct. 2004 à 11:54
DrwImageUnscaled me parait plus appropriée dans ton cas en fait
sinon le graphics est defini sur le bitmap et non le form, donc les coordonnées 0,0 me semblent plus correctes :)

Cocoricoooooooo !!!!
coq
MVP Visual C#
0
godefrw Messages postés 56 Date d'inscription lundi 13 septembre 2004 Statut Membre Dernière intervention 20 mars 2006
11 oct. 2004 à 14:26
Ca ne marche pas...J'ai utilsé ce code:
g.DrawImageUnscaled(MyImage,0,0,thisform.Width,thisform.Height);
Je pense que la solution de calculer les coordonnées de dessin en fonction de la taille de la pictureBox est meilleure. Par contre je ne sais absoluement pas le faire.
En fait dans mon application c'est l'utilisateur qui déssine. Il dessine un rectangle qu'il étire en déplaçant la souris. Je recupère les coordonnées de ce rectangle dans la pictureBox grasse à la position du cursor de la souris. Je trace ensuite le rectangle. En théorie les coordonnées de dessin sont déjà calculer en fonction de la taille de la pictureBox non?
si tu as une idée lumineuse...
Ced
0
godefrw Messages postés 56 Date d'inscription lundi 13 septembre 2004 Statut Membre Dernière intervention 20 mars 2006
12 oct. 2004 à 10:20
Merci!
C'est exactement ce que je voulais faire! Mon code était très proche sauf que je n'utilisais pas le bon constructeur de bitmap....

Ced
0
Rejoignez-nous