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