在 ASP 经典中将十六进制转换为 RGB
Convert Hex to RGB in ASP Classic
你能告诉我如何在 ASP Classic/VBScript 中将十六进制转换为 RGB 吗?我尝试在整个 Internet 上搜索并尝试了许多建议的解决方案,但 none 指出了我想要实现的目标。
我已经尝试了以下功能,但其中 none 有效:Convert hex color string to RGB color
转换为RBB后,我希望根据背景颜色设置文本颜色。所以基本上我的背景颜色代码是十六进制的。
首先,您使用“&h”表示法将十六进制代码转换为十进制代码并解析结果。之后,只需执行基本的按位运算符即可从数字中提取 RGB 值。
Dim hexval : hexval = "fdfeff"
Dim rgbval : rgbval = CLng("&h" & hexval)
Dim r : r = (rgbval And &hff0000&) / 65536
Dim g : g = (rgbval And &h00ff00&) / 256
Dim b : b = (rgbval And &h0000ff&)
wscript.echo Join(Array(hexval, rgbval, r, g, b), vbcrlf)
这会产生以下输出:
fefeff
16645887
253
254
255
这有点长,我相信 base 16 函数可以更有效,但它确实有效。
' Convert Hex to RGB
Function ConvertHexToRBG(theHexColor)
Color = Replace(theHexColor, "#", "")
Red = (Mid(Color, 1, 2))
Green = (Mid(Color, 3, 2))
Blue = (Mid(Color, 5, 2))
ConvertHexToRBG = "RGB("&ConvertHexToInt(red)&","&ConvertHexToInt(green)&","&ConvertHexToInt(blue)&",1)"
End Function
Function ConvertHexToInt(theStr)
If theStr <> "" Then
SELECT Case Left(theStr,1)
Case "F"
T = 15
Case "E"
T = 14
Case "D"
T = 13
Case "C"
T = 12
Case "B"
T = 11
Case "A"
T = 10
Case "9"
T = 9
Case "8"
T = 8
Case "7"
T = 7
Case "6"
T = 6
Case "5"
T = 5
Case "4"
T = 4
Case "3"
T = 3
Case "2"
T = 2
Case "1"
T = 1
CASE "0"
T = 0
Case Else
T = Left(theStr,1)
End SELECT
SELECT Case Right(theStr,1)
Case "F"
D = 15
Case "E"
D = 14
Case "D"
D = 13
Case "C"
D = 12
Case "B"
D = 11
Case "A"
D = 10
Case "9"
D = 9
Case "8"
D = 8
Case "7"
D = 7
Case "6"
D = 6
Case "5"
D = 5
Case "4"
D = 4
Case "3"
D = 3
Case "2"
D = 2
Case "1"
D = 1
CASE "0"
D = 0
Case Else
D = Right(theStr,1)
End SELECT
ConvertHexToInt = CInt(T*16)+CInt(D)
Else
ConvertHexToInt = theStr
End If
你能告诉我如何在 ASP Classic/VBScript 中将十六进制转换为 RGB 吗?我尝试在整个 Internet 上搜索并尝试了许多建议的解决方案,但 none 指出了我想要实现的目标。
我已经尝试了以下功能,但其中 none 有效:Convert hex color string to RGB color
转换为RBB后,我希望根据背景颜色设置文本颜色。所以基本上我的背景颜色代码是十六进制的。
首先,您使用“&h”表示法将十六进制代码转换为十进制代码并解析结果。之后,只需执行基本的按位运算符即可从数字中提取 RGB 值。
Dim hexval : hexval = "fdfeff"
Dim rgbval : rgbval = CLng("&h" & hexval)
Dim r : r = (rgbval And &hff0000&) / 65536
Dim g : g = (rgbval And &h00ff00&) / 256
Dim b : b = (rgbval And &h0000ff&)
wscript.echo Join(Array(hexval, rgbval, r, g, b), vbcrlf)
这会产生以下输出:
fefeff
16645887
253
254
255
这有点长,我相信 base 16 函数可以更有效,但它确实有效。
' Convert Hex to RGB
Function ConvertHexToRBG(theHexColor)
Color = Replace(theHexColor, "#", "")
Red = (Mid(Color, 1, 2))
Green = (Mid(Color, 3, 2))
Blue = (Mid(Color, 5, 2))
ConvertHexToRBG = "RGB("&ConvertHexToInt(red)&","&ConvertHexToInt(green)&","&ConvertHexToInt(blue)&",1)"
End Function
Function ConvertHexToInt(theStr)
If theStr <> "" Then
SELECT Case Left(theStr,1)
Case "F"
T = 15
Case "E"
T = 14
Case "D"
T = 13
Case "C"
T = 12
Case "B"
T = 11
Case "A"
T = 10
Case "9"
T = 9
Case "8"
T = 8
Case "7"
T = 7
Case "6"
T = 6
Case "5"
T = 5
Case "4"
T = 4
Case "3"
T = 3
Case "2"
T = 2
Case "1"
T = 1
CASE "0"
T = 0
Case Else
T = Left(theStr,1)
End SELECT
SELECT Case Right(theStr,1)
Case "F"
D = 15
Case "E"
D = 14
Case "D"
D = 13
Case "C"
D = 12
Case "B"
D = 11
Case "A"
D = 10
Case "9"
D = 9
Case "8"
D = 8
Case "7"
D = 7
Case "6"
D = 6
Case "5"
D = 5
Case "4"
D = 4
Case "3"
D = 3
Case "2"
D = 2
Case "1"
D = 1
CASE "0"
D = 0
Case Else
D = Right(theStr,1)
End SELECT
ConvertHexToInt = CInt(T*16)+CInt(D)
Else
ConvertHexToInt = theStr
End If