【VB6|第17期】16进制颜色值与RGB值互相转换(含源码)
日期:2023年3月28日
作者:Commas
签名:(ง •_•)ง 积跬步以致千里,积小流以成江海……
注释:如果您觉得有所帮助
,帮忙点个赞
,也可以关注我
,我们一起成长;如果有不对的地方,还望各位大佬不吝赐教,谢谢^ - ^
1.01365 = 37.7834;0.99365 = 0.0255
1.02365 = 1377.4083;0.98365 = 0.0006
文章目录
- 一、前言
- 二、原理浅谈
- 三、代码实现
- 1、RGB转十六进制(RGB Color to Hex Color)
- 2、十六进制转RGB(Hex Color to RGB Color)
- 四、案例分享
一、前言
以前老是分不清颜色表示方法的原理,就知道网页比较喜欢用带#
的颜色表示法(后来才知道,原来这个叫做十六进制颜色表示法),桌面程序比较喜欢用RGB
颜色表示法。以至于遇到颜色表示法需要转换,就直接找颜色转换的网页来帮助完成工作。静下心来看看,原来也就这么回事,于是做了一个小工具,源码放到最后,安全无毒,可以放心食用的 ^ _ ^
二、原理浅谈
RGB颜色(RGB Color
):由红、绿、蓝三种颜色组成的混合颜色,每种颜色的取值范围是0~255。
- 第一个参数
R
(Red
):红色; - 第二个参数
G
(Green
):绿色; - 第三个参数
B
(Blue
):蓝色;
十六进制颜色(Hex Color
):十六进制颜色码以“#
”开头,后六位是分别由红、绿、蓝三种颜色组成的混合颜色,每种颜色的取值范围是0~255,用两位十六进制数表示。
- 前面两位表示红色;
- 中间两位表示绿色;
- 后面两位表示蓝色;
看到这,相信聪明的小伙伴们会发现,两种表示法都是描述红、绿、蓝颜色通道,只不过用的进制不一样罢了,RGB Color
用的是十进制,而Hex Color
用的是十六进制,所以颜色转换本质上就是进制转换;
举个浅粉红的例子,如下所示:
类型 | 颜色表示 | 红(R ) | 绿(G ) | 蓝(B ) |
---|---|---|---|---|
RGB Color | RGB(255, 182, 193) | 255 | 182 | 193 |
Hex Color | #FFB6C1 | FF | B6 | C1 |
进制转换计算:
FF = (15*16^1)+(15*16^0) = 240+15 = 255
B6 = (11*16^1)+(6*16^0) = 176+6 = 182
C1 = (12*16^1)+(1*16^0) = 192+1 = 193
知识加油站:
十六进制是计算机中数据的一种表示方法,逢十六进一,由0-9
,A-F
组成,字母不区分大小写。与十进制的对应关系是:0-9
对应0-9
;A-F
对应10-15
。
三、代码实现
核心代码都在这里了,两种颜色的转换,详情如下所示:
1、RGB转十六进制(RGB Color to Hex Color)
Public Function RgbToHex(ByVal lValue As Long) As String
On Error Resume Next
'函数说明:RGB长整型值转换为16进制颜色值
'创建作者:Commas
'创建时间:2023-03-21
'修改时间:
'------数据格式说明------
'lValue:RGB的长整型值
'------数据格式说明------
Dim red As Long
Dim green As Long
Dim blue As Long
red = lValue And ColorConstants.vbRed
green = (lValue And ColorConstants.vbGreen) / (2 ^ 8)
blue = (lValue And ColorConstants.vbBlue) / (2 ^ 16)
RgbToHex = "#" & Right$("0" & Hex(red), 2) & Right$("0" & Hex(green), 2) & Right$("0" & Hex(blue), 2)
End Function
2、十六进制转RGB(Hex Color to RGB Color)
Public Function HexToRgb(ByVal sHexColor As String) As Long
On Error Resume Next
'函数说明:16进制颜色值转换为RGB长整型值
'创建作者:Commas
'创建时间:2023-03-20
'修改时间:
'------数据格式说明------
'sHexColor:#FFF,#bfcddb
'------数据格式说明------
Dim red As Long, green As Long, blue As Long
If Left(sHexColor, 1) <> "#" Then
HexToRgb = CLng(Val(sHexColor))
Exit Function
End If
If Len(sHexColor) <= 4 Then
Dim i As Integer, strTemp
strTemp = "#"
For i = 2 To Len(sHexColor)
strTemp = strTemp & String(2, Mid(sHexColor, i))
Next i
sHexColor = strTemp
End If
red = Val("&H" & Mid(sHexColor, 2, 2))
green = Val("&H" & Mid(sHexColor, 4, 2))
blue = Val("&H" & Mid(sHexColor, 6, 2))
HexToRgb = RGB(red, green, blue)
End Function
四、案例分享
任意输入RGB
、Long
或者 十六进制颜色表示法
其中之一,另外两个就会自动计算出来。
下载地址:
- 免费白嫖:https://download.csdn.net/download/qq_35844043/87620344
- 积分下载:https://download.csdn.net/download/qq_35844043/87620358
版权声明:本文为博主原创文章,如需转载,请给出:
原文链接:https://blog.csdn.net/qq_35844043/article/details/129686350