vb里面,10进制转颜色代码

来源:百度知道 编辑:UC知道 时间:2024/06/19 12:29:26
在16进制颜色代码中,FF0000是表示红色,但是在vb里面。要&HFF表示红色,
它不等于&HFF0000 而是等于&HFF(也就是10进制中的255),也就是说#AABBCC 在VB里要&HCCBBAA来表示.
现在问题来了。我要把#AABBCC转换成vb里面的颜色代码,可以要RGB(&HCC, &HBB, &HAA)转换,但是我要把vb里面的颜色,转换成标准的颜色代码,怎么转换?
比如#0A0B00(6位数代表一种色)在vb中要&HB0A(三位数,而且B,A的们置也不一样)表示,那怎么样把&HB0A转换成标准6位数颜色代码?谁能给我一个与RGB相反的转换函数,
Private Function HexToTen(TheHex) '16进制转10进制
Thestr = "&H" & TheHex
HexToTen = Thestr + 0
End Function
Function ColortoTen(HexColor) '颜色转成数字
ca1 = Mid(HexColor, 1, 2)
ca1 = HexToTen(ca1)
ca2 = Mid(HexColor, 3, 2)
ca2 = HexToTen(ca2)
ca3 = Mid(HexColor, 5, 2)
ca3 = HexToTen(ca3)
ColortoTen = RGB(ca1, ca2, ca3)
End Function
Function TenTOColor(TenColor) '数字转成颜色
ca = CStr(Hex(TenColor))
ca = Left("000000", 6 - Len(ca)) & ca
ca1 = Mid(ca, 1, 2)
ca2 = Mid(ca, 3, 2)
ca3 = Mid(ca, 5, 2)
TenTOColor

Option Explicit

Private Sub Command1_Click()
Dim ret As String

ret = VBColorToStr(&HB0A)
MsgBox ret
End Sub

Private Function VBColorToStr(ByVal dwColor As Long) As String
Dim lpBlue As String
Dim lpGreen As String
Dim lpRed As String

'通过And &HFF获得低位8个bit
lpRed = Format$(CStr(Hex(dwColor And &HFF)), "@@")

'乘以2^(-8)再取整,表示将整个数右移8个bit,然后通过And &HFF获得低位8个bit
lpGreen = Format$(CStr(Hex(Int(dwColor * 2 ^ (-8)) And &HFF)), "@@")

'乘以2^(-16)再取整,表示将整个数右移16个bit,然后通过And &HFF获得低位8个bit
lpBlue = Format$(CStr(Hex(Int(dwColor * 2 ^ (-16)) And &HFF)), "@@")

'函数返回值前将字符串按照RGB格式排列,并将" "符号替换成"0"
VBColorToStr = Replace(lpRed & lpGreen & lpBlue, " ", "0")
End Function

用数字运算速度大大快于字符串运算,所以应尽量采用取数字的二进制算法得到结果,最后再