【VB6|第17期】16进制颜色值与RGB值互相转换(含源码)

日期:2023年3月28日
作者:Commas
签名:(ง •_•)ง 积跬步以致千里,积小流以成江海……
注释:如果您觉得有所帮助,帮忙点个赞,也可以关注我,我们一起成长;如果有不对的地方,还望各位大佬不吝赐教,谢谢^ - ^
1.01365 = 37.7834;0.99365 = 0.0255
1.02365 = 1377.4083;0.98365 = 0.0006


【VB6|第17期】16进制颜色值与RGB值互相转换(含源码)_第1张图片


文章目录

  • 一、前言
  • 二、原理浅谈
  • 三、代码实现
    • 1、RGB转十六进制(RGB Color to Hex Color)
    • 2、十六进制转RGB(Hex Color to RGB Color)
  • 四、案例分享


一、前言

以前老是分不清颜色表示方法的原理,就知道网页比较喜欢用带#的颜色表示法(后来才知道,原来这个叫做十六进制颜色表示法),桌面程序比较喜欢用RGB颜色表示法。以至于遇到颜色表示法需要转换,就直接找颜色转换的网页来帮助完成工作。静下心来看看,原来也就这么回事,于是做了一个小工具,源码放到最后,安全无毒,可以放心食用的 ^ _ ^

二、原理浅谈

RGB颜色(RGB Color:由红、绿、蓝三种颜色组成的混合颜色,每种颜色的取值范围是0~255。

  • 第一个参数 RRed):红色;
  • 第二个参数 GGreen):绿色;
  • 第三个参数 BBlue):蓝色;

十六进制颜色(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-9A-F组成,字母不区分大小写。与十进制的对应关系是:0-9对应0-9A-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

四、案例分享

【VB6|第17期】16进制颜色值与RGB值互相转换(含源码)_第2张图片
任意输入RGBLong 或者 十六进制颜色表示法其中之一,另外两个就会自动计算出来。


下载地址:

  • 免费白嫖: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

你可能感兴趣的:(VB6,RGB,Hex,Color,颜色转换,进制转换,颜色转换器)