0
我寫了一個小型顏色選擇器代碼我自己,它運作良好。然而這個問題,當我移動滑塊來獲得所選擇的顏色(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。 謝謝。
經過幾輪測試和瀏覽像素編碼後,我發現了WritableBitmap.Lock和Unlock Methods,開始處理速度非常快,但仍然不夠,速度快了5倍。 – surpavan