我更像是一個PHP編碼器,然後是VB.net程序員,所以我做了這個,想知道是否有人可以幫助我轉換這個函數。將函數從PHP轉換爲VB.NET時遇到困難
<?php
function grabshade($r,$g,$b){
$colors = array(array(0, 0, 0), array(255, 255, 255));
$differencearray = array();
$colors2 = array(
'black' => array(0, 0, 0),
'white' => array(255, 255, 255));
foreach ($colors as $col2) {
$delta_r = $r - $col2[0];
$delta_g = $g - $col2[1];
$delta_b = $b - $col2[2];
$distance = $delta_r * $delta_r + $delta_g * $delta_g + $delta_b * $delta_b;
array_push($differencearray, $distance);
}
$smallest = min($differencearray);
$key = array_search($smallest, $differencearray);
return $key = array_search($colors[$key], $colors2);
}
?>
如果PHP腳本接近白色或黑色,它將獲取r,g,b值並返回。
這應該是工作,但它不返回任何東西。
Public Function findshade(ByVal r, ByVal g, ByVal b) As Integer
Dim colors As New ArrayList()
colors.Add("0:0:0")
colors.Add("255:255:255")
Dim differencearray As New ArrayList()
Dim colors2 As New ArrayList()
colors2.Add("0:0:0")
colors2.Add("255:255:255")
Dim i As Integer
For i = 0 To colors.Count - 1 Step i + 1
Dim colorsparts As String() = colors(i).Split(":")
Dim delta_r As Integer = r - colorsparts(0)
Dim delta_g As Integer = g - colorsparts(1)
Dim delta_b As Integer = b - colorsparts(2)
Dim distance As Integer = delta_r * delta_r + delta_g * delta_g + delta_b * delta_b
differencearray.Add(distance)
Next
differencearray.Sort()
Dim minValue As Integer = Convert.ToInt32(differencearray(0))
Dim result As New ArrayList()
For ii As Integer = 0 To differencearray.Count
If differencearray(ii).Contains(minValue) Then result.Add(i)
Next
Dim key As Integer = result(0)
Dim result2 As New ArrayList()
For ii As Integer = 0 To colors2.Count
If colors2(ii).Contains(key) Then result2.Add(i)
Next
Return result2(0)
End Function
到目前爲止取得了哪些進展?你遇到了什麼絆腳石?沒有什麼特別的PHP在這裏不會將*立即*轉換成任何*其他語言...好吧,也許'array_search'可能需要一些跳躍。 – Charles 2011-03-25 05:50:51
我不太瞭解VB.net,就像我不知道如何爲那個任務形成數組(比如能夠編輯鍵名),或者像你說的array_search。 – Ugleh 2011-03-25 05:59:59
@Joseph,感謝您的更新。我更新了這篇文章的標題,使其更有用,並希望吸引有用的關注。我自己並不知道任何VB,所以我不會太多幫助。 ''array_search'將成爲唯一的問題,我想。值得慶幸的是,它可以作爲對數組的簡單迭代實現,當它找到值時結束。當然,這實際上意味着使用真正的數組而不是分割字符串...... – Charles 2011-03-25 06:28:21