Disegnare un cerchio su un'immagine in una PictureBox

venerdì 25 marzo 2011 - 22.57
Tag Elenco Tags  C#  |  .NET 4.0  |  Windows 7  |  Visual Studio 2010

DotNetBeginner Profilo | Newbie

Ciao a tutti. Ho un problema: dovrei disegnare un cerchio (o più di uno) in una PictureBox che si trova in un form e che conterrà un'immagine (selezionata con una OpenFileDialog).

La cosa che faccio è la seguente:

1) Intercetto l'evento del mouse (Mouse Enter) quando il cursore del mouse si trova nella PictureBox:


... //variabili private definite nel codice C# del Form private int StartX, StartY, EndX, EndY; private bool bFlagMouseMove = false; private bool bFlagMouseEnter = false; private bool bFlagMouseDown = false; // Dalla Guida MSDN // ------------------------------------------------- // Mouse events occur in the following order: // MouseEnter // MouseMove // MouseHover/ MouseDown/ MouseWheel // MouseUp // MouseLeave //:. Occurs when the mouse pointer enters the control. private void PictureBoxPreview_MouseEnter(object sender, EventArgs e) { this.label2.Text = sender.GetType().ToString() + ": MouseEnter"; this.bFlagMouseEnter = true; }
2) Intercetto l'evento Mouse Down quando clicco il tasto sx del mouse:


//:. Occurs when the mouse pointer is over the control and a mouse button is pressed private void PictureBoxPreview_MouseDown( object sender, MouseEventArgs e ) { this.PictureBoxPreview.Cursor = Cursors.Cross; if ( this.bFlagMouseEnter ) { this.bFlagMouseDown = true; //salvo le coordinate del mouse in 2 variabili this.StartX = e.X; this.StartY = e.Y; this.LabelTrackBarZoomValue.Text = this.StartX + " " + this.StartY; //prova.... } }


3) Intercetto l'evento MouseMove quando muovo il mouse:

//:. Occurs when the mouse pointer is moved over the control. private void PictureBoxPreview_MouseMove(object sender, MouseEventArgs e) { this.label2.Text = sender.GetType().ToString() + ": MouseMove"; //prova.... if ( this.bFlagMouseEnter ) { //ho premuto un tasto del mouse e precisamente quello sx if ( this.bFlagMouseDown && e.Button == MouseButtons.Left ) { this.LabelTrackBarZoomValue.Text = this.EndX + " " + this.EndY; this.EndX = e.X; this.EndY = e.Y; } } }

4) Definisco gli eventi che intercettano il MouseUpe il MouseLeave;

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Quando c'è un evento MouseUp, dovrei disegnare il cerchio sulla PictureBox, ma, pur calcolando le coordinate iniziali e finali, per poter visualizzare il cerchio disegnato, devo muovere le scrollbar del pannello che contiene la PictureBox, altrimenti non si vede il cerchio disegnato. Come posso effettuare una "redraw" dell'immagine in modo tale da risolvere questo problema? Qualcuno potrebbe spiegarmi dove sbaglio? Grazie in anticipo per le risposte...

luigidibiasi Profilo | Guru

nell'evento mouseUp

// Draw ellipse to screen.
g.DrawEllipse( blackPen, this.StartX, this.StartY, width, height
>this.PictureBoxPreview.Invalidate()

sotto il drawing aggiungi invalidate



Luigi Di Biasi


http://www.dibiasi.it/
http://netsell.dibiasi.it - ecomm software -
http://blogs.dotnethell.it/luigidibiasi/

DotNetBeginner Profilo | Newbie

OK, Grazie mille Luigi. Adesso funziona....
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5