17/06/09 20:35
Jeremy
Ciao.
Devi usare l'oggetto Graphics del form che ti viene restituito come parametro nella gestione dell'evento OnPaint del Form.
Sotto il Namespace System.Drawing, trovi tutti i metodi necessari per sfruttare l'oggetto Graphics.
Ciao
Devi usare l'oggetto Graphics del form che ti viene restituito come parametro nella gestione dell'evento OnPaint del Form.
Sotto il Namespace System.Drawing, trovi tutti i metodi necessari per sfruttare l'oggetto Graphics.
Ciao
aaa
18/06/09 7:52
Il Totem
Ma in Graphics non c'è lo strumento 'secchiello'. Mi sa che devi confrontare i pixel uno alla volta, confrontando il primo (quello dove clicchi) con gli altri adiacenti, e questi a loro volte con i pixel antistanti, come in un effetto a cascata. Ricorda che devi anche consideare colori molto simili ma non uguali: per questo ti consiglio di usare la classe HslColor di Rich Newman, che trovi in questi siti:
C# > richnewman.wordpress.com/2007/05/07/using-hsl-color-hue-saturation-luminosity-to-create-better-looking-guis-part-2/
vb > totem.altervista.org/appunti/…
Inoltre, ti devo dire che le funzioni GetPixel e SetPixel sono molto lente, e sarebbe meglio effettuare l'operazione in memoria (codice unsafe dal punto di vista .net).
C# > richnewman.wordpress.com/2007/05/07/using-hsl-color-hue-saturation-luminosity-to-create-better-looking-guis-part-2/
vb > totem.altervista.org/appunti/…
Inoltre, ti devo dire che le funzioni GetPixel e SetPixel sono molto lente, e sarebbe meglio effettuare l'operazione in memoria (codice unsafe dal punto di vista .net).
aaa
18/06/09 19:26
Federico1976
Grazie delle risposte
Pero non mi Riesce capire ,Se la figura mi risultasse aperta
Tipo un elisse con un punto del diametro Cancellato o del colore dell'area
dovrei colorare anche al suo esterno fino alle aree delimitate da altri colori
puoi farmi un esempio
Pero non mi Riesce capire ,Se la figura mi risultasse aperta
Tipo un elisse con un punto del diametro Cancellato o del colore dell'area
dovrei colorare anche al suo esterno fino alle aree delimitate da altri colori
puoi farmi un esempio
aaa
19/06/09 8:09
Il Totem
Dato che non ho voglia di smanettare con l'hsl ora, ipotizziamo di avere una funzione Treshold, che ci dice quando i due colori sono simili, restituendo un numero intero: se 0, i due colori sono identici. Ammettiamo anche di avere un valore di tolleranza Tolerance, che esprime quanta diversità possano avere due colori per essere considerati simili. Il codice sarebbe simile a questo, anche se per comodità uso le funzioni di bitmap (e sarebbe meglio fare tutto in memoria!):
Dim P As Point 'punto dove hai cliccato col secchiello 'B è la bitmap in questione Dim Points As New List(Of Point) Dim NewPoints As New List(of Point) Points.Add(P) Do Try For Each K As Point In Points Dim Temp As Int32 Dim J As Point 'testa il punto a destra di questo J = New Point(K.X - 1, K.Y) Temp = Treshold(B, K, J) < Tolerance If (Temp < Tolerance) And (Temp > 0) Then B.SetPixel(J, SelectedColor) NewPoints.Add(J) End If 'ripeti con le altre direzioni Catch Ex As Exception End Try Points.Clear() Points.AddRange(NewPoints) NewPoints.Clear() Loop Until NewPoints.Count = 0
aaa
21/06/09 11:54
Federico1976
Grazie Totem
Ho Quasi risolto con Dei Piccoli problemi
in pratica quando clicco al di fuori di una figura mi colora un rombo delle dimensioni
variabili asseconda di dove clicco
se invece clicco dentro una figura funziona tutto regolare
posto il codice magari potrebbe servire
-----------------------------------------------------------------------------------------------
Codice Rivisionato
Ho Quasi risolto con Dei Piccoli problemi
in pratica quando clicco al di fuori di una figura mi colora un rombo delle dimensioni
variabili asseconda di dove clicco
se invece clicco dentro una figura funziona tutto regolare
posto il codice magari potrebbe servire
-----------------------------------------------------------------------------------------------
Codice Rivisionato
'Strumento secchiello Public Function Area(ByVal P As Point, ByVal img As Bitmap) As Bitmap 'P punto dove hai cliccato col secchiello 'B è la bitmap In questione Dim Points As New List(Of Point) Dim NewPoints As New List(Of Point) Dim ColoreAttuale As Color = Nothing Dim ColoreDACambiare As Color = img.GetPixel(P.X, P.Y) Points.Add(P) Do Try For Each K As Point In Points Dim J As Point Dim d As Point Dim s As Point Dim Sot As Point 'testa il punto a destra di questo If K.X > 0 Then J = New Point(K.X - 1, K.Y) End If ColoreAttuale = img.GetPixel(J.X, J.Y) If OpIma.IsNearestColor(ColoreAttuale, ColoreDACambiare, 10) = True Then 'Funzione Di Confronto Colore con coefficente If Points.IndexOf(J) = -1 Then img.SetPixel(J.X, J.Y, BrushBtn.BackColor) NewPoints.Add(J) End If End If If d.X < img.Width - 1 Then d = New Point(K.X + 1, K.Y) End If ColoreAttuale = img.GetPixel(d.X, d.Y) If OpIma.IsNearestColor(ColoreAttuale, ColoreDACambiare, 10) = True Then If Points.IndexOf(d) = -1 Then img.SetPixel(d.X, d.Y, BrushBtn.BackColor) NewPoints.Add(d) End If End If If K.Y > 0 Then s = New Point(K.X, K.Y - 1) End If ColoreAttuale = img.GetPixel(s.X, s.Y) If OpIma.IsNearestColor(ColoreAttuale, ColoreDACambiare, 10) = True Then If Points.IndexOf(s) = -1 Then img.SetPixel(s.X, s.Y, BrushBtn.BackColor) NewPoints.Add(s) End If End If If Sot.Y < img.Height - 1 Then Sot = New Point(K.X, K.Y + 1) End If ColoreAttuale = img.GetPixel(Sot.X, Sot.Y) If OpIma.IsNearestColor(ColoreAttuale, ColoreDACambiare, 10) = True Then If Points.IndexOf(Sot) = -1 Then img.SetPixel(Sot.X, Sot.Y, BrushBtn.BackColor) NewPoints.Add(Sot) End If End If Next Catch ex As Exception MsgBox(ex.Message) End Try Points.Clear() Points.AddRange(NewPoints) NewPoints.Clear() Loop Until Points.Count = 0 Return img End Function
Ultima modifica effettuata da Federico1976 24/06/09 11:41
aaa
22/06/09 10:40
Federico1976
Scusa ai ragione Un elissi un quadrato ecc.. Una forma geometrica
Ultima modifica effettuata da Federico1976 22/06/09 10:42
aaa