我有一个数据库表,它将颜色值存储为BGR(蓝色,绿色,红色),并且要在完整日历中使用,需要将它们格式化为RGB(十进制,十进制,十进制)字符串。有没有更好的方法然后转换为十六进制,然后拆分,然后回到十进制?
示例BGR颜色:13369599
color = ("%06x" % 13369599).to_s.split(/(..)(..)(..)/)
=> ["", "cc", "00", "ff"]
rgb_value = "rgb( " << color[3].hex.to_s << "," << color[2].hex.to_s << "," << color[1].hex.to_s << ");"
期望的输出
rgb_value = rgb( 255,00,204);
答案 0 :(得分:1)
我的第一种语言之一是C,以下是一个相当微不足道的宏。
color = ((color & 0xff0000) >> 16) | (color & 0x00ff00) | ((color & 0x0000ff) << 16)
将其置于bgr_to_rgb
方法中并忘记它。无需覆盖#to_s
或#hex
。
要从BGR代码中获取各个R,G,B值,请使用
red = color & 0x0000ff
green = color & 0x00ff00
blue = color & 0xff0000