AHK的相似取色

简介

PixelGetColor 通常用于在特定像素处获取单一颜色值,这对于大多数应用程序来说是足够的。然而,一些带有反作弊机制的软件,例如《英雄联盟》的外服版本,会对图像进行模糊处理(Fuzz处理)。在这种情况下,我们需要采用一种能够识别颜色相似性的取色方法,以确保逻辑的正确执行。

绝对取色

先给出绝对取色的代码:

;取色组
GetColor(x,y)
{
	PixelGetColor, color, x, y, RGB
	StringRight color,color,10 ;
	return color
}

;绝对取色
F9::
    MouseGetPos, mouseX, mouseY
    PixelGetColor, color, %mouseX%, %mouseY%, RGB
    StringRight color,color,10
    ;tooltip, %mouseX%,%mouseY%颜色是:%color%
    tooltip, %mouseX%,%mouseY%颜色是:%color%, 0, 0 
    Clipboard=GetColor(%mouseX%,%mouseY%)=="%color%"
return

这段AutoHotkey脚本定义了一个名为`GetColor`的函数,用于从屏幕上任意位置获取颜色值,并返回去掉前缀的十六进制颜色代码。同时,它还设置了一个F9热键,当按下时,脚本会获取鼠标当前位置的颜色值,显示一个提示框展示这个颜色值,并尝试将这个值复制到剪贴板。
 

相似取色

相似取色需要在绝对取色的基础上进行修改,添加对RGB通道中颜色的对比。其中的 diff 逻辑可以自行修改,可以是对比偏差的总和,也可以是比较每个RGB通道中颜色的偏差阈值,如以下代码:

;RGB通道相似函数
IsColorSeems(x, y, color)
{
; 定义两个颜色的RGB值
color1 := GetColor(x,y)  ; 第一个颜色的十六进制表示
color2 := color  ; 第二个颜色的十六进制表示

; 将十六进制颜色值转换为十进制RGB值
Red1 := ((color1 >> 16) & 0xFF)
Green1 := ((color1 >> 8) & 0xFF)
Blue1 := (color1 & 0xFF)

Red2 := ((color2 >> 16) & 0xFF)
Green2 := ((color2 >> 8) & 0xFF)
Blue2 := (color2 & 0xFF)

; 计算两个颜色在RGB通道上的差异,并使用Abs函数取绝对值
deltaRed := Abs(Red1 - Red2)
deltaGreen := Abs(Green1 - Green2)
deltaBlue := Abs(Blue1 - Blue2)

; 定义颜色差异的阈值
threshold := 5  ; 这个值可以根据需要调整

; 判断两个颜色是否接近
if (deltaRed <= threshold && deltaGreen <= threshold && deltaBlue <= threshold) {
    return true
} else {
    return false
}

}


;取色组
GetColor(x,y)
{
	PixelGetColor, color, x, y, RGB
	StringRight color,color,10 ;
	return color
}

;绝对取色
F9::
	MouseGetPos, mouseX, mouseY
	PixelGetColor, color, %mouseX%, %mouseY%, RGB
	StringRight color,color,10
	;tooltip, %mouseX%,%mouseY%颜色是:%color%
	tooltip, %mouseX%,%mouseY%颜色是:%color%, 0, 0 
	Clipboard=GetColor(%mouseX%,%mouseY%)=="%color%"
return

;相似取色
F11::
	MouseGetPos, mouseX, mouseY
	PixelGetColor, color, %mouseX%, %mouseY%, RGB
	StringRight color,color,10
	;IsColorSeems()
	tooltip, %mouseX%,%mouseY%颜色seems:%color%, 0, 0 
	Clipboard=IsColorSeems(%mouseX%,%mouseY%, "%color%")

return

上述AutoHotkey脚本定义了一个名为 IsColorSeems 的函数,它通过比较两个颜色在RGB通道上的差异来判断它们是否足够相似。如果两个颜色的RGB值在每个通道上的差异都小于预设的阈值,则认为这两个颜色是相似的,并返回真(true);否则返回假(false)。这个函数可以用来识别在视觉上相近的颜色,即使反作弊机制中颜色值有所变化。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值