我自己编写了一个小的颜色选择器代码,效果很好。然而问题是,当我移动幻灯片以获得所选颜色(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。 谢谢。
答案 0 :(得分:1)
找到了答案,似乎梯度图表也是通过使用xaml完全相同的方式生成如下:
</Canvas>-->
<Canvas Width="256" Height="256" Margin="32,30,215,26">
<Canvas.Background>
<LinearGradientBrush StartPoint="0 0.5" EndPoint="1 0.5">
<GradientStop Color="White" Offset="0" />
<GradientStop Offset="1" Color="{Binding ElementName=MySlider, Path=Value, Converter={StaticResource SlidertoColor1}}" />
</LinearGradientBrush>
</Canvas.Background>
<Canvas Width="256" Height="256">
<Canvas.Background>
<LinearGradientBrush StartPoint="0.5 0" EndPoint="0.5 1">
<GradientStop Color="Transparent" Offset="0" />
<GradientStop Color="Black" Offset="1" />
</LinearGradientBrush>
</Canvas.Background>
</Canvas>
</Canvas>
感谢您的支持。