数時間探していて、探しているものが見つからないため、これが可能かどうかはわかりません。
私がやっているのは、半透明のゲームパネルから色をとっているので、私が取っている色は常に微妙に変化しています. 必要なのは、希望する色の +/- 10 程度の色合いであるかどうかを確認する方法です。
color1 が 0x の +/-10 の場合は、次のようになります。
画像検索を使って同様のことを試みましたが、うまくいきませんでした。
どんな助けでも大歓迎です
数時間探していて、探しているものが見つからないため、これが可能かどうかはわかりません。
私がやっているのは、半透明のゲームパネルから色をとっているので、私が取っている色は常に微妙に変化しています. 必要なのは、希望する色の +/- 10 程度の色合いであるかどうかを確認する方法です。
color1 が 0x の +/-10 の場合は、次のようになります。
画像検索を使って同様のことを試みましたが、うまくいきませんでした。
どんな助けでも大歓迎です
ロバートの答えに加えて、色を数学的に比較できます。
まず、赤、緑、青の値を分離することから始めます。
ToRGB(color) {
return { "r": (color >> 16) & 0xFF, "g": (color >> 8) & 0xFF, "b": color & 0xFF }
}
次に、色を比較する関数が必要です。3 つの変数はそれぞれ、2 つのカラー値の差を表す数値を保持します。たとえば、赤が255
c1 にあり200
、c2 にある場合は、rdiff
になります55
。より高い値を持っている場合にAbs
終わらないように使用します。次に、これらのそれぞれの差が よりも小さいことを確認します。 -55
c2
vary
Compare(c1, c2, vary=20) {
rdiff := Abs( c1.r - c2.r )
gdiff := Abs( c1.g - c2.g )
bdiff := Abs( c1.b - c2.b )
return rdiff <= vary && gdiff <= vary && bdiff <= vary
}
使用方法は次のとおりです。いくつかの数値を取得し、デフォルトの範囲である 20 でそれらを比較します。
light_pink := ToRGB(0xFFAAFF)
darker_pink := ToRGB(0xFAACEF)
purple := ToRGB(0xAA00FF)
MsgBox % Compare(light_pink, dark_pink) ; True
MsgBox % Compare(light_pink, purple) ; False
PixelGetColor の制限についてお読みになったと思います: 既知の制限:
「部分的に透明なウィンドウ、または非表示 (TransColor) とマークされた色の 1 つを持つウィンドウは、通常、ウィンドウ自体ではなく背後にあるウィンドウの色を生成します。PixelGetColor は、特定のアプリケーションでは正確な結果を生成しない場合があります。これが発生した場合は、単語を指定してみてください。最後のパラメータに Alt または Slow を指定してください。」
ImageSearch を使用する場合、色のデルタを指定できます。例:
ImageSearch, FoundX, FoundY, %SearchRangeLeft%, %SearchRangeTop%, %SearchRangeRight%, %SearchRangeBottom%, *20 %ImageFile%
ここで*20は、私の検索色の 0 から 255 までの範囲の変化を示します。100,100,100 (RGB) の画像内のピクセルを検索すると、80,80,80 と 120,120,120 の間の任意のピクセルに一致します。これが役立つことを願っていますが、透明な色を一致させることは難しく、エラーが発生しやすくなります. 画像と検索範囲が小さいほど、優れた (そして高速な)