开始

最近在写网页,在设计页面颜色时常常向各个地方“借色”。

开始一直用Snipaste,觉得取色用得很频繁,所以用AHK写了取色工具。

其中重要的一部分就是颜色的表示(#xxx或rgb())。

主体

首先,下面是一个简单的取色热键。

使用了我库中的函数,在置顶随笔中可以找到仓库

!+7:: GetColor(false)
!7:: GetColor()

GetColor(hex := true) {
  _color := PixelGetColor(Cursor.x, Cursor.y, 'slow').substring(3)
  _color := hex
    ? _color
    : _hexToRGB(_color)
  A_Clipboard := _color, Tip.ShowTip(_color)

  _hexToRGB(_c) {
    if (_c.length = 3) {
      _c := _c[0] + _c[0] + _c[1] + _c[1] + _c[2] + _c[2]
    }
    ; 提取RGB分量的十六进制值
    r := ('0x' _c.substring(1, 3)) & 0xFF
    g := ('0x' _c.substring(3, 5)) & 0xFF
    b := ('0x' _c.substring(5)) & 0xFF

    ; 返回rgb()格式的颜色表示
    return JoinStr(',', 'rgb(', r, g, b ')')
  }
}

  • 取色
    取色使用AHK自带的api。
    我发现使用alt模式似乎不准确,所以使用slow

  • 转换
    我需要#xxx表示和rgb()表示,所以设置了两个热键。

里面有一点很坑,在ahk的文档中,找不到将十六进制字符串转换为整数的api,也没有提到如何转换;但实际上只需要拼接0x,再做位运算就可以转换了。

这是模糊间想起在其他脚本中看到的方法,否则我就写一个转换函数了……

最后

实际上,我打算写一个像Snipaste一样的取色(很好用),这并不难(使用gdi,在先前我写过此功能的"零件"),不过现在还是使用这种简单的形式吧……

posted on 2024-06-25 20:56  落寞的雪  阅读(133)  评论(0编辑  收藏  举报