我自己写了一个小的颜色选择器代码,效果很好。但是问题是,当我移动幻灯片以获取选定颜色(RGB)时,画布(白色黑色渐变和选定颜色需要时间。延迟是因为代码:
代码如下:
Try
'Dim converter As New SlidertoColor
'Dim cornercolor As Color = converter.Convert(MySlider.Value, Nothing, Nothing, Nothing)
Dim cornercolor As Color = Value
Dim y As Integer = 0
Dim x As Integer = 0
Dim wb As New WriteableBitmap(256, 256, 96, 96, PixelFormats.Pbgra32, Nothing)
Dim stride As Integer = CInt((wb.PixelWidth * wb.Format.BitsPerPixel) / 8)
Dim RD As Decimal = cornercolor.R / 255
Dim GD As Decimal = cornercolor.G / 255
Dim BD As Decimal = cornercolor.B / 255
Dim r As Decimal = cornercolor.R
Dim g As Decimal = cornercolor.G
Dim b As Decimal = cornercolor.B
Dim lr As New List(Of Decimal)
Dim lb As New List(Of Decimal)
Dim lg As New List(Of Decimal)
Try
For i = 0 To 255
lr.Add(r)
r = r - RD
lg.Add(g)
g = g - GD
lb.Add(b)
b = b - BD
Next
Catch ex As Exception
End Try
r = cornercolor.R
g = cornercolor.G
b = cornercolor.B
'For y = 255 To 0 Step -1
For y = 0 To 255
RD = ((255 - y) - lr(y)) / 255
GD = ((255 - y) - lg(y)) / 255
BD = ((255 - y) - lb(y)) / 255
If RD < 0 Then
RD = RD * -1
End If
If GD < 0 Then
GD = GD * -1
End If
If BD < 0 Then
BD = BD * -1
End If
'Need to work on this section
r = 255 - y
g = 255 - y
b = 255 - y
For x = 0 To 255
Try
Dim colorData As Byte() = {
CByte(b),
CByte(g),
CByte(r),
CByte(255)}
Dim rect As New Int32Rect(x, y, 1, 1)
wb.WritePixels(rect, colorData, stride, 0)
r = r - RD
g = g - GD
b = b - BD
If r < 0 Then
r = 0
End If
If g < 0 Then
g = 0
End If
If b < 0 Then
b = 0
End If
Catch ex As Exception
End Try
Next
Next
'Dim colorData As Byte() = {CByte(blue), CByte(green),
' CByte(red), CByte(255)}
'Dim rect As New Int32Rect(x, y, 1, 1)
'Try
' wb.WritePixels(rect, colorData, stride, 0)
'Catch ex As Exception
'End Try
Dim k As New ImageBrush
k.ImageSource = wb
Return k
你能告诉我如何加快这个过程,或者有没有一种有效的方法来实现这一点。我知道有免费使用的颜色选择器,但我想尝试自己的。我正在使用 VB.Net,WPF。谢谢你。