golang+rgb2hex

给定一个颜色的rgb值如何转换成hex,反过来又如何转换?

在本节,我们需要掌握基本的面向对象知识--如何给一个类型添加方法。还需要掌握strconv这个包

写出结构体

type RGB struct {
  red, green, blue int64
}

type HEX struct {
  str string
}

method

现在我们就可以构建RGB的颜色对象和HEX的颜色对象了。对于对象来说,除了属性外,还应当包含一些方法。我们可以给RGB类型的对象一个方法,rgb2hex。

要把rgb转成hex,其实就是把r,g,b分别转成16进制(字符串),再拼起来。

strconv.FormatInt(r,16) //返回r的16进制表达

但是要注意,如果r,g,b中存在小于16的值,上面的方法就行不通了。比如r值为11,用上面的方法得到的是"b",但是合法的hex希望我们得到的是"0b",所以我们需要判断,如果得到的字符串只有一位,则在其左侧补上一个0

func t2x ( t int64 ) string {
  result := strconv.FormatInt(t, 16)
  if len(result) == 1{
    result = "0" + result
  }
  return result
}

下面我们就可以写出我们的 rgb2hex 的函数了

func (color RGB) rgb2hex() HEX {
  r := t2x(color.red)
  g := t2x(color.green)
  b := t2x(color.blue)
  return HEX{r+g+b}
}

同样,我们也可以写出hex2rgb,这里我们使用strconv.ParseInt()来将字符串解析为整数

func (color HEX) hex2rgb() RGB {
  r, _ := strconv.ParseInt(color.str[:2], 16, 10)
  g, _ := strconv.ParseInt(color.str[2:4], 16, 18)
  b, _ := strconv.ParseInt(color.str[4:], 16, 10)
  return RGB{r,g,b}
}

测试

func main() {
  color1 := RGB{11,33,243}
  fmt.Println(color1.rgb2hex().str)
  color2 := HEX{"0b21f3"}
  fmt.Println(color2.hex2rgb())
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 32,941评论 18 399
  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 8,747评论 0 4
  • 我曾多次思考过一个问题:在这个虚伪占主角的社会,我是否应做一个嘴甜,老讲别人好话的人,阿谀奉承别人?还是做原本的自...
    梦不可逝阅读 2,905评论 0 0
  • 又到一年一度的百团大战。希望社也要招新,我们去cos。本来昨晚、今天我都要去cos的,但昨晚因为学习压力不想去...
    lxt阅读 3,418评论 7 1
  • 下午喂儿子吃苹果,他和往常一样对着嘴边的苹果直摇头,我着急又无奈。 我想这样不行,孩子必须吃点水果,哪怕他吃到嘴里...
    林清因阅读 2,256评论 0 0

友情链接更多精彩内容