Python实现RGB和HEX颜色互转(Microsoft的RGB函数)

本文介绍了如何使用Python进行RGB颜色值与HEX颜色值之间的相互转换,并提供了详细的代码示例。特别关注了VBA中RGB函数的应用及其实现方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述

使用xlwings修改边框颜色时,需要使用HEX颜色(16进制),研究发现该值对应Microsoft的RGB函数

实际上,调用from xlwings.utils import rgb_to_int即可




代码

def rgb2hex(rgbcolor, tohex=False):
    '''RGB转HEX

    :param rgbcolor: RGB颜色元组,Tuple[int, int, int]
    :param tohex: 是否转十六进制字符串,默认不转
    :return: int or str

    >>> rgb2hex((255, 255, 255))
    16777215
    >>> rgb2hex((255, 255, 255), tohex=True)
    '0xffffff'
    '''
    r, g, b = rgbcolor
    result = (r << 16) + (g << 8) + b
    return hex(result) if tohex else result


def hex2rgb(hexcolor):
    '''HEX转RGB

    :param hexcolor: int or str
    :return: Tuple[int, int, int]

    >>> hex2rgb(16777215)
    (255, 255, 255)
    >>> hex2rgb('0xffffff')
    (255, 255, 255)
    '''
    hexcolor = int(hexcolor, base=16) if isinstance(hexcolor, str) else hexcolor
    rgb = ((hexcolor >> 16) & 0xff, (hexcolor >> 8) & 0xff, hexcolor & 0xff)
    return rgb




VBA的RGB函数

对应Microsoft 颜色常量,适用于xlwings的边框颜色等

在这里插入图片描述
公式如下:

Hex = R + G × 256 + B × 65536 \text{Hex}=\text{R}+\text{G}\times 256+\text{B}\times 65536 Hex=R+G×256+B×65536

实际上就是把R和B的权重换过来

def rgb2hex_VBA(rgbcolor, tohex=False):
    '''RGB转HEX

    :param rgbcolor: RGB颜色元组,Tuple[int, int, int]
    :param tohex: 是否转十六进制字符串,默认不转
    :return: int or str

    >>> rgb2hex_VBA((0, 0, 0))  # 黑色
    0
    >>> rgb2hex_VBA((255, 0, 0))  # 红色
    255
    >>> rgb2hex_VBA((0, 255, 0))  # 绿色
    65280
    >>> rgb2hex_VBA((255, 255, 0))  # 黄色
    65535
    >>> rgb2hex_VBA((0, 0, 255))  # 蓝色
    16711680
    >>> rgb2hex_VBA((255, 0, 255))  # 洋红
    16711935
    >>> rgb2hex_VBA((0, 255, 255))  # 蓝绿
    16776960
    >>> rgb2hex_VBA((255, 255, 255))  # 白色
    16777215
    >>> rgb2hex_VBA((255, 255, 255), tohex=True)
    '0xffffff'
    '''
    r, g, b = rgbcolor
    result = r + (g << 8) + (b << 16)
    return hex(result) if tohex else result


def hex2rgb_VBA(hexcolor):
    '''HEX转RGB

    :param hexcolor: int or str
    :return: Tuple[int, int, int]

    >>> hex2rgb_VBA(16777215)
    (255, 255, 255)
    >>> hex2rgb_VBA('0x0')
    (0, 0, 0)
    >>> hex2rgb_VBA('0xff00ff')
    (255, 0, 255)
    >>> hex2rgb_VBA('0xffffff')
    (255, 255, 255)
    '''
    hexcolor = int(hexcolor, base=16) if isinstance(hexcolor, str) else hexcolor
    rgb = (hexcolor & 0xff, (hexcolor >> 8) & 0xff, (hexcolor >> 16) & 0xff)
    return rgb




常用颜色

在这里插入图片描述

color = ['red', 'orange', 'yellow', 'green', 'cyan', 'blue', 'purple'] # 红橙黄绿青蓝紫
color = {'red': '#FF0000', 'orange': '#FFA500', 'yellow': '#FFFF00', 'green': '#008000', 'cyan': '#00FFFF', 'blue': '#0000FF', 'purple': '#800080'} # 红橙黄绿青蓝紫




参考文献

  1. python实现颜色rgb和hex相互转换的函数
  2. Microsoft RGB 函数
  3. Microsoft 颜色常量
  4. RGB和HEX颜色互相转换
  5. VBA 解析Color的RGB值
  6. Python hex()
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

XerCis

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值