开始
最近在写网页,在设计页面颜色时常常向各个地方“借色”。
开始一直用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,在先前我写过此功能的"零件"),不过现在还是使用这种简单的形式吧……