PixelGetColor的RGB值在Autohotkey中不起作用

时间:2019-02-13 09:10:46

标签: autohotkey

PixelGetColor命令的RGB(十进制)值在自动热键中不起作用。

如果您使用以下命令行,我确实期望:PixelGetColor, color, %MouseX%, %MouseY%, RGB

它会给我结果,一个[RGB(十进制)值。],但是它给我一个[RGB(十六进制)]

,如果使用命令行,则为默认值:PixelGetColor, color, %MouseX%, %MouseY%

然后它将给我结果,一个[RGB(Hex)值],但给我一个[BGR(Hex)值]

注意-我确实根据评论重新编辑了我的问题!

我从BGR格式中听到了新的声音,我不明白我们为什么要这么做。

我认为用户和我想要更多类似[Default:RGB> Hex Value]和参数[,RGB> Decimal Value]的结果

现在的问题是,如何从PixelGetColor命令获取RGB(十进制)值。

此AHK脚本不起作用。

Color Picker.ahk

;#notrayicon
#SingleInstance force

; + = Shift
; ! = Alt
; ^ = Ctrl
; # = Win (Windows logo key)

esc::exitapp ;You can click the (esc) key to stop the script.

f1::  
MouseGetPos MouseX, MouseY
;PixelGetColor, color, %MouseX%, %MouseY% ;The default result is a BGR>Hex Value - i wish this should be RGB>Hex
PixelGetColor, color, %MouseX%, %MouseY%, RGB ;RGB Parameter i wish it should be have a RGB>Decimal value - otherwise this parameter does not have for me a useful function. 
MsgBox,, , The color at the current cursor position is %color%., 3
return

Autohotkey docs命令> PixelGetColor

color picker

2 个答案:

答案 0 :(得分:2)

虽然其他答案有效且确实很聪明,但它又冗长又复杂。 Format函数是内置函数,可以转换为十六进制。决定

因此,使用您的代码并添加一行用于格式设置,我们可以通过以下方法解决它:

f1::
MouseGetPos MouseX, MouseY
PixelGetColor, color, %MouseX%, %MouseY%, RGB
color := Format( "{1:u},{1:u},{1:u}", "0x" . SubStr(color, 3, 2), "0x" . SubStr(color, 5, 2), "0x" . SubStr(color, 7, 2))
MsgBox,, , The color at the current cursor position is %color%., 3
return

我敢打赌,还有一种更有效的方法,但是目前这还超出了我的范围。

答案 1 :(得分:1)

如果要获取[RGB值]

您可以先使用PixelGetColor命令

然后使用函数转换HexToRgb(color)

尝试此AHK脚本:

Color Picker.ahk

;#notrayicon
#SingleInstance force

; + = Shift
; ! = Alt
; ^ = Ctrl
; # = Win (Windows logo key)

esc::exitapp ;You can click the (esc) key to stop the script.

f1::  
MouseGetPos MouseX, MouseY
PixelGetColor, color, %MouseX%, %MouseY%, RGB 
a := HexToRgb(color)
MsgBox,, , The color at the current cursor position is %a%, 0
;MsgBox, % "Example:`n`n" . rgbToHex("255,255,255") . "`n" . HexToRgb("0xFFFFFF") . "`n" . CheckHexC("000000")
return


rgbToHex(s, d = "") {

    StringSplit, s, s, % d = "" ? "," : d

    SetFormat, Integer, % (f := A_FormatInteger) = "D" ? "H" : f

    h := s1 + 0 . s2 + 0 . s3 + 0

    SetFormat, Integer, %f%

    Return, "#" . RegExReplace(RegExReplace(h, "0x(.)(?=$|0x)", "0$1"), "0x")

}



hexToRgb(s, d = "") {

    SetFormat, Integer, % (f := A_FormatInteger) = "H" ? "D" : f

    Loop, % StrLen(s := RegExReplace(s, "^(?:0x|#)")) // 2

        c%A_Index% := 0 + (h := "0x" . SubStr(s, A_Index * 2 - 1, 2))

    SetFormat, Integer, %f%

    Return, c1 . (d := d = "" ? "," : d) . c2 . d . c3

}



CheckHexC(s, d = "") {

    If InStr(s, (d := d = "" ? "," : d))

        e := hexToRgb(rgbToHex(s, d), d) = s

    Else e := rgbToHex(hexToRgb(s)) = (InStr(s, "#") ? "" : "#"

        . RegExReplace(s, "^0x"))

    Return, e

}

rgb color picker