### 如何执行更好的着色功能？

``````Private badcolor As Color = Color.FromArgb(0, 0, 0, 0)
Public Function grayscalePixel(ByVal basecolor As Color) As Color

Return grayscalePixel(basecolor, 0.3, 0.59, 0.11)

End Function

Public Function grayscalePixel(ByVal basecolor As Color, ByVal RedMix As Double, ByVal GreenMix As Double, ByVal BlueMix As Double) As Color
If basecolor.A = 0 Then
End If
If (RedMix + GreenMix + BlueMix > 1) Or (RedMix + GreenMix + BlueMix <= 0) Then
Return grayscalePixel(basecolor)
End If

Dim grayval As Integer = basecolor.R * RedMix + basecolor.G * GreenMix + basecolor.B * BlueMix

Return Color.FromArgb(basecolor.A, grayval, grayval, grayval)
End Function
Public Function colorizePixel(ByVal basecolor As Color, ByVal colorize As Color) As Color
If basecolor.A = 0 Then
End If
Dim grayval As Color = grayscalePixel(basecolor)

Dim r As Integer = Convert.ToInt32(grayval.R) + Convert.ToInt32(colorize.R)
Dim g As Integer = Convert.ToInt32(grayval.R) + Convert.ToInt32(colorize.G)
Dim b As Integer = Convert.ToInt32(grayval.R) + Convert.ToInt32(colorize.B)

If r > 255 Then
r = 255
End If
If g > 255 Then
g = 255
End If
If b > 255 Then
b = 255
End If
If r < 0 Then
r = 0
End If
If g < 0 Then
g = 0
End If
If b < 0 Then
b = 0
End If

Return Color.FromArgb(basecolor.A, r, g, b)
End Function
``````

#### 1 个答案:

``````rNew = (grayVal.R / 2) + (colorize.R / 2)
``````

``````rNew = (0.5F * grayval.R) + (0.5F * colorize.R)
``````