Disegnare giocando coi colori

giovedì 29 maggio 2008 - 14.45

willy_80 Profilo | Senior Member

Ciao a tutti,

Sto facendo un applicazione con vb2005.

Ho un file contenente una serie di punti provenienti da un rilevamento laser, quindi, una serie di punti con coordinate X,Y,Z.
Sto tentando di disegnare la figura vista dall'alto ma non intendo impazziere col 3D, mi basterebbe come ho gia visto fare da alcuni altri sfw disegnare in una picturebox una serie di punti e in base al valore di Z variare il loro colore.

Faccio un esempio:
1. Analizzando il file il valore minimo di Z è 0 e quello massimo è 500
2. Al valore minimo associo il nero e al valore massimo il giallo
3. Prendo in considerazione il punto X100Y300Z250, in questo caso nella picturebox alle coordinate 100,300 disegno un punto di colore esattamente intermedio tra nero e giallo ovviamente scomponendolo in RGB, e così via per tutti i punti.

Io per disegnare uso questo sistema:

Dim bm = New Bitmap(3000, 3000)
Dim g As Graphics = Drawing.Graphics.FromImage(bm)

---------- QUA DOVREI DISEGNARE TUTTI I VARI PUNTINI

Picturebox.Image = bm

Riesco a creare un immagine, riesco a disegnarci dentro linee e cerchi e a caricarla nella picturebox ma non riesco a colorare del colore che voglio io i vari pixel.

AVETE LA SOLUZIONE ?

Grazie

aiedail92 Profilo | Expert

Ciao

Per ottenere un colore intermedio fra due puoi usare una funzione tipo questa:

Function GetIntermediateColor( _ ByVal z As Integer, _ 'Il valore intermedio del colore ByVal maxz As Integer, _ 'Il valore massimo (nel tuo caso 500) ByVal startColor As Color, _ 'Il colore iniziale (nel tuo caso nero) ByVal endColor As Color) _ 'Il colore finale (nel tuo caso giallo) As Color Dim r As Integer = endColor.R - CInt(startColor.R) Dim g As Integer = endColor.G - CInt(startColor.G) Dim b As Integer = endColor.B - CInt(startColor.B) Dim ratio As Single = z / maxz Return Color.FromArgb(ratio * r + startColor.R, _ ratio * g + startColor.G, _ ratio * b + startColor.B) End Function

Invece per impostare un singolo pixel dell'immagine, devi agire sulla bitmap, non sul graphics, usando la funzione Bitmap.SetPixel:

bm.SetPixel(x, y, Color)

Luca
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