【发布时间】:2015-08-10 02:13:27
【问题描述】:
我用谷歌搜索了一段时间,试图找到一个可以将 RGB 输入更改为十进制的 vb.net 函数。我知道有 convert.Int32 路线,但需要 Hex -> decimal。
【问题讨论】:
-
如果你想发布一个自我回答的问题,应该有一个可接受格式的实际问题。否则有些人可能会对此进行DV。
-
你很久没有Google了。
我用谷歌搜索了一段时间,试图找到一个可以将 RGB 输入更改为十进制的 vb.net 函数。我知道有 convert.Int32 路线,但需要 Hex -> decimal。
【问题讨论】:
如果您想避免来自 Microsoft.VisualBasic 的方法(例如,您希望能够轻松地将其转换为 C#),您可以比您建议的答案更有效地做到这一点:
Function RGBtoInteger(r As Integer, g As Integer, b As Integer) As Integer
If r > 255 OrElse g > 255 OrElse b > 255 OrElse r < 0 OrElse g < 0 OrElse b < 0 Then
Throw New ArgumentException("Parameters must be in the range 0..255.")
End If
Return (b << 16) + (g << 8) + r
End Function
【讨论】:
(b << 16) + (g << 8) + r模仿VB的Information.RGB的回归;而 (r << 16) + (g << 8) + b 将相当于 OP 的版本。任你选。 (+1)
I don't care about the down votes 但每个 DVd 问题都会让您更接近禁令或问题限制; DV 的问题在 Google 和搜索结果中的排名较低,因此答案将帮助更少的人;它更有可能被关闭和/或删除。如果它被删除,它现在可能会更困扰莫顿先生,因为他将失去 20 个代表和 2 个刻度,以获得他的银色 VB 徽章。 DV 很重要。
这是我创建的函数,希望它有用吗(我知道我通过从 10 到 16 的转换重新发明了轮子……但这很有趣。我是一个数学极客):
Public Function RGBtoDecimal(red As Integer, green As Integer, blue As Integer) As Long
Dim dec As Long = 0
Dim n, r As Integer
'write each colour as base 16
'blue first, starting with smallest power of 16 right to left
n = blue
Dim j As Integer = 0
For i As Integer = 0 To 1
r = CInt(Math.Round(16 * ((n / 16) - Int(n / 16))))
n = CInt(Int(n / 16))
dec = CLng(dec + (r * (16 ^ j)))
j += 1
Next
'green
n = green
For i As Integer = 0 To 1
r = CInt(Math.Round(16 * ((n / 16) - Int(n / 16))))
n = CInt(Int(n / 16))
dec = CLng(dec + (r * (16 ^ j)))
j += 1
Next
'red
n = red
For i As Integer = 0 To 1
r = CInt(Math.Round(16 * ((n / 16) - Int(n / 16))))
n = CInt(Int(n / 16))
dec = CLng(dec + (r * (16 ^ j)))
j += 1
Next
Return dec
End Function
【讨论】: