Comment sélectionner une zone sur une PictureBox.L'Image avec la souris en C#
je voulais juste mettre une sélection sur ma picturebox.image mais cela vient tout juste de devenir pire que ce que certains peu gênant de la situation. Je pensais que sur une autre zone de l'image au-dessus de la picturebox, mais il semblait tellement paresseux de travail pour moi. J'ai besoin de savoir si il existe un moyen de créer une zone de sélection (ce qui va être la moitié transparente zone bleue) sur une picturebox.l'image de ce qui im va dessiner avec la souris et il ne faut pas changer l'image im travaillant sur.
exemple:
//Start Rectangle
//
private void pictureBox1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
{
//Determine the initial rectangle coordinates...
RectStartPoint = e.Location;
Invalidate();
}
//Draw Rectangle
//
private void pictureBox1_MouseMove(object sender, System.Windows.Forms.MouseEventArgs e)
{
if (e.Button != MouseButtons.Left)
return;
Point tempEndPoint = e.Location;
Rect =
new Rectangle(
Math.Min(RectStartPoint.X, tempEndPoint.X),
Math.Min(RectStartPoint.Y, tempEndPoint.Y),
Math.Abs(RectStartPoint.X - tempEndPoint.X),
Math.Abs(RectStartPoint.Y - tempEndPoint.Y));
Invalidate(Rect);
}
//Draw Area
//
private void pictureBox1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
{
//Draw the rectangle...
if (pictureBox1.Image != null)
{
Brush brush = new SolidBrush(Color.FromArgb(128, 72, 145, 220));
e.Graphics.FillRectangle(brush, Rect);
}
}
Alors, voulez-vous de créer une zone de sélection sur une image dans un pictureBox? Le choix de la boîte de loi, de même que de cliquer et glisser sur le bureau pour créer un carré bleu transparent?
OriginalL'auteur Berker Yüceer | 2012-06-14
Vous devez vous connecter pour publier un commentaire.
J'ai utilisé votre code, vous avez été près de là. Vous avez besoin d'Invalider la pictureBox1 au lieu du rectangle. J'ai aussi ajouté un chèque pour le Rect pour qu'il ne soit pas tirer quand il n'est pas initialisé ou n'a pas de taille.
Un autre changement important: j'ai créé le Rectangle qu'une seule fois et j'ai ajusté son emplacement et sa taille. Moins de déchets à nettoyer!
MODIFIER
J'ai ajouté un clic droit de souris gestionnaire pour le Rectangle.
BTW: de la mise En œuvre de la brosse est créé de nouveau et de nouveau. Essayer de l'en empêcher. Je vais modifier mon code pour que ainsi.
maintenant, il semble vraiment doux et utile.. merci
Oui. hormis qu'il soit superflu, Brosses à réclamer les ressources non managées. Lorsque vous ne jetez pas ces pinceaux (et d'autres objets GDI) ce mémoire sera toujours attribuée. Selon la fréquence de la souris déplace le code pourrait donc fuite assez de mémoire. Voir aussi cette réponse: stackoverflow.com/a/1336752/563088
provoque un renouvellement de la PictureBox. le redessiner les appels soulève l'événement de Peinture et la Peinture gestionnaire d'événements dessine le rectangle. La bonne chose à propos de cette solution est que chaque fois que le contrôle PictureBox est redraw (déplacée, redimensionnée, échelle,...), le rectangle suivra et sera toujours insync. En outre, la Peinture gestionnaire reçoit une référence à l'objet graphique qui est nécessaire pour dessiner le rectangle, donc nous n'avons pas à créer (et d'en disposer) d'un grapics objet de nous-mêmes.
OriginalL'auteur Erno de Weerd
Nous apprécions que vous avez pris le temps de donner une solution, Cependant, une bonne réponse devrait également avoir une certaine description pourquoi il permettrait de résoudre le problème de l'OP, et si possible, point exactement les choses que l'OP doit répondre. Le défilement de gros fragments de code tourne habituellement les gens hors de. Essayez de le modifier pour le rendre plus utilisable à la fois pour l'OP et de la communauté.
OriginalL'auteur Ajmal Kayani