Fondere 2 graphics per visualizzare il risultato su picturebox con vb....

martedì 12 maggio 2009 - 21.46

hirpo Profilo | Newbie

Buona sera a tutti, mi scuso subito per il titolo criptico, ma essendo un semplice appassionato non so come spegare il problema.
Provo a descriverlo in modo molto elementare, perciò vi prego di essere pazienti per le eventuali sciocchezze che scriverò.
Sto cercando di imparare la parte di vb.net che utilizza le gdi+ e per far ciò sto cercando di realizzare un clone di paint.
Ho creato una finestra con un picturebox dove poter disegnare, e i vari pulsanti per il colore e per il tipo di oggetto da disegnare.
Sono riuscito a far disegnare una linea sulla picturebox tramite il metodo drawline, e sfruttando lo stesso metodo sono riuscito anche a far apparire la linea mentre la si disegna, per intenderci quando si preme il pulsante e si sposta il mouse la linea che dovrà apparire appena si lascia il pulsante.
In particolare utilizzo l'evento mousedown della picturebox per memorizzare le coordinate di partenza della linea, ed il metodo mouseup sempre della picturebox per disegnare la linea.
[code]evento mousedown
VariabiliGlobali.XXPartenza = e.X
VariabiliGlobali.YYPartenza = e.Y
VariabiliGlobali.PulsantePremuto = True
[\code]
[code]evento mouseup
VariabiliGlobali.XXArrivo = e.X
VariabiliGlobali.YYArrivo = e.Y
VariabiliGlobali.PulsantePremuto = False

Dim Penna As Pen
Dim Colore As Color
Dim Spessore As Integer
Dim Immagine, ImmagineTemp1, ImmagineTemp2, ImmagineDef As Image
Dim GraficoDef As Graphics

Spessore = Me.Label105.Text
Colore = Me.Panel51.BackColor

Try
Immagine = New Bitmap(Me.PictureBox8.Image)
Catch
Immagine = New Bitmap(Me.PictureBox8.Width, Me.PictureBox8.Height)
End Try

Grafico(0) = Graphics.FromImage(Immagine)
Penna = New Pen(Colore, Spessore)
If Me.Label106.Text = 1 Then
Grafico(0).DrawLine(Penna, VariabiliGlobali.XXPartenza, VariabiliGlobali.YYPartenza, VariabiliGlobali.XXArrivo, VariabiliGlobali.YYArrivo)
ElseIf Me.Label106.Text = 3 Then
Dim Rettangolo As Rectangle
Rettangolo.X = Math.Min(VariabiliGlobali.XXArrivo, VariabiliGlobali.XXPartenza)
Rettangolo.Y = Math.Min(VariabiliGlobali.YYArrivo, VariabiliGlobali.YYPartenza)
Rettangolo.Width = Math.Abs(VariabiliGlobali.XXArrivo - VariabiliGlobali.XXPartenza)
Rettangolo.Height = Math.Abs(VariabiliGlobali.YYArrivo - VariabiliGlobali.YYPartenza)
Grafico(0).DrawRectangle(Penna, Rettangolo)
ElseIf Me.Label106.Text = 4 Then
Dim Rettangolo As Rectangle
Dim Riempimento As New SolidBrush(Colore)
Rettangolo.X = Math.Min(VariabiliGlobali.XXArrivo, VariabiliGlobali.XXPartenza)
Rettangolo.Y = Math.Min(VariabiliGlobali.YYArrivo, VariabiliGlobali.YYPartenza)
Rettangolo.Width = Math.Abs(VariabiliGlobali.XXArrivo - VariabiliGlobali.XXPartenza)
Rettangolo.Height = Math.Abs(VariabiliGlobali.YYArrivo - VariabiliGlobali.YYPartenza)
Grafico(0).FillRectangle(Riempimento, Rettangolo)
End If


'Fusione immagini

GraficoDef = Me.PictureBox8.CreateGraphics
ImmagineTemp1 = New Bitmap(Me.PictureBox8.Width, Me.PictureBox8.Height, Grafico(0))
ImmagineTemp2 = New Bitmap(Me.PictureBox8.Width, Me.PictureBox8.Height, Grafico(1))
GraficoDef.DrawImage(ImmagineTemp1, 0, 0)
GraficoDef.DrawImage(ImmagineTemp2, 0, 0)
ImmagineDef = New Bitmap(Me.PictureBox8.Width, Me.PictureBox8.Height, GraficoDef)
PictureBox8.Image = ImmagineDef
[\code]
L'oggetto Grafico(0) e Grafico(1) è una matrice di oggetti graphics che mi serve per poter far disegnare l'oggetto (linea, cerchio, quadrato...) mentre si sposta il muose con il pulsante premuto. In sostanza in Grafico(0) memorizzo quello che c'era nella picturebox prima che disegnassi l'ultima linea, mentre in grafico(1) c'è l'ultima linea disegnata. Il mio problema è quello di fondere i due grafici in un' unica immagine e di farla visualizzare nella picturebox. Ho provato con il codice sopra riportato ma nisba e non essendo un esperto ho deciso di chiedere aiuto.
Grazie in anticipo Rino.
P.S. se avete qualche altra strada per realizzare il tutto mi raccomando suggeritelo
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-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5