1

数時間探していて、探しているものが見つからないため、これが可能かどうかはわかりません。

私がやっているのは、半透明のゲームパネルから色をとっているので、私が取っている色は常に微妙に変化しています. 必要なのは、希望する色の +/- 10 程度の色合いであるかどうかを確認する方法です。

color1 が 0x の +/-10 の場合は、次のようになります。

画像検索を使って同様のことを試みましたが、うまくいきませんでした。

どんな助けでも大歓迎です

4

2 に答える 2

4

ロバートの答えに加えて、色を数学的に比較できます。

まず、赤、緑、青の値を分離することから始めます。

ToRGB(color) {
    return { "r": (color >> 16) & 0xFF, "g": (color >> 8) & 0xFF, "b": color & 0xFF }
}

次に、色を比較する関数が必要です。3 つの変数はそれぞれ、2 つのカラー値の差を表す数値を保持します。たとえば、赤が255c1 にあり200、c2 にある場合は、rdiffになります55。より高い値を持っている場合にAbs終わらないように使用します。次に、これらのそれぞれの差が よりも小さいことを確認します。 -55c2vary

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
于 2013-06-01T20:50:13.373 に答える
0

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 の間の任意のピクセルに一致します。これが役立つことを願っていますが、透明な色を一致させることは難しく、エラーが発生しやすくなります. 画像と検索範囲が小さいほど、優れた (そして高速な)

于 2013-06-01T13:30:26.187 に答える