目次
指定位置の色情報を取得します。戻り値は0(#000000)~16777215(#FFFFFF)の間の数値で返されます。指定できる座標の範囲は(x, y) = (0, 0)から(G_SCREEN_W-1, G_SCREEN_H-1)の範囲です。
- 構文
- Integer = PEEKCOLOR( X, Y, RGB指定, クリップボード指定 )
- 引数
- X、Y (Integer)必須
- 座標 X、Y
- RGB指定 (#peekcolor = 0)省略可
- 0
- BGR値にて返す (デフォルト)
- COL_RGB(3)
- RGB値にて返す
- COL_R(4)
- 赤の成分のみを返す
- COL_G(5)
- 緑の成分のみを返す
- COL_B(6)
- 青の成分のみを返す
- クリップボード指定 (Boolean = False)省略可
- FALSE
- 画面より(デフォルト)
- TRUE
- クリップボードより
- 戻り値
- 指定位置の色情報BGR値 例) 青:$FF0000、緑:$00FF00、赤:$0000FF、オレンジ:$0080FF、黄:$00FFFFRGB値 例) 赤:$FF0000、緑:$00FF00、青:$0000FF、オレンジ:$FF8000、黄:$FFFF00
使い方
Color値から各成分を求める
AND(論理積)を使うことでColor値から各成分を求めることができます。
以下はカーソル位置の座標のColor値を一度だけ取得し、その値から赤成分、緑成分、青成分を計算で求めるプログラムです。
DIM color = PEEKCOLOR(G_MOUSE_X, G_MOUSE_Y, 0)
PRINT color AND $FF // R成分
PRINT (color AND $FF00) / $100 // G成分
PRINT (color AND $FF0000) / $10000 // B成分
以下のように各成分毎に取得することもできますが、PEEKCOLOR関数の実行のタイミングで対象座標の色が変化すると正しく取得できない場合もあり得ます。
DIM x = G_MOUSE_X
DIM y = G_MOUSE_Y
PRINT PEEKCOLOR(x, y, COL_R)
PRINT PEEKCOLOR(x, y, COL_G)
PRINT PEEKCOLOR(x, y, COL_B)
指定位置の色情報を取得
座標(x, y) = (100, 100)の色情報をColor値で取得します。
PRINT PEEKCOLOR(100, 100)
- 結果
13421772
Color値ではなく各成分で取得したい場合は、colorToRGB関数 (自作関数)もしくはcolorToBGR関数 (自作関数)を使います。
以下はPEEKCOLOR関数で返されたColor値を#RRGGBB形式にする例です。
PRINT colorToRGB(PEEKCOLOR(100, 100), TRUE)
- 結果
#CCCCCC
カーソル位置の色情報を吹き出しに表示
カーソル位置の色情報を吹き出しに表示します。
SETHOTKEY(VK_ESC, EMPTYPARAM, "forceQuit")
WHILE TRUE
DIM x = G_MOUSE_X
DIM y = G_MOUSE_Y
FUKIDASI("BGR<#TAB>" + PEEKCOLOR(x, y) + "<#CR>" + _
"RGB<#TAB>" + PEEKCOLOR(x, y, COL_RGB) + "<#CR>" + _
"R<#TAB>" + PEEKCOLOR(x, y, COL_R) + "<#CR>" + _
"G<#TAB>" + PEEKCOLOR(x, y, COL_G) + "<#CR>" + _
"B<#TAB>" + PEEKCOLOR(x, y, COL_B))
SLEEP(0.001)
WEND
指定座標の色変化を検知
x,yに色変化を検知したい座標を指定し、その座標の色情報を初期値としてcolorに代入します。
以下の例では座標(x, y) = (100, 100)の色情報を取得し、色の変化があるまで待機します。
REPEAT文の終了条件として最初に取得したcolorと現時点の色情報を比較し、値が変わればループを抜けます。色の変化がない場合無限ループになるので、対策としてESCで強制終了するようにしています。
色変化があった場合ループを抜けメッセージを表示します。
SETHOTKEY(VK_ESC, EMPTYPARAM, "forceQuit")
DIM x = 100
DIM y = 100
DIM color = PEEKCOLOR(x, y)
REPEAT
SLEEP(0.001)
UNTIL PEEKCOLOR(x, y) <> color
FUKIDASI("色の変化を検知しました")
SLEEP(1.000)
指定座標の色の一致を検知
座標(x,y) = (0, 50)の色がRGB形式で#FFFFFFになるまで待機します。PEEKCOLOR関数はColor値でRGB形式と直接比較できないので、#FFFFFFをColor値に変換してから比較しています。PEEKCOLOR関数をcolorToRGB関数 (自作関数)でRGB形式に揃えて比較することも可能です。
SETHOTKEY(VK_ESC, EMPTYPARAM, "forceQuit")
REPEAT
SLEEP(0.001)
UNTIL PEEKCOLOR(0, 50) = RGBToColor("#FFFFFF")
FUKIDASI("指定座標の色が一致しました")
SLEEP(1.000)
プログラム実行例
カーソル座標と色情報を取得
HASHTBL rgb
WHILE TRUE
DIM x = G_MOUSE_X
DIM y = G_MOUSE_Y
DIM c = PEEKCOLOR(x, y)
rgb["r"] = decToHex(c AND $FF)
rgb["g"] = decToHex((c AND $FF00) / $100)
rgb["b"] = decToHex((c AND $FF0000) / $10000)
IF LENGTH(rgb["r"]) = 1 THEN rgb["r"] = "0" + rgb["r"]
IF LENGTH(rgb["g"]) = 1 THEN rgb["g"] = "0" + rgb["g"]
IF LENGTH(rgb["b"]) = 1 THEN rgb["b"] = "0" + rgb["b"]
c = "" + rgb["b"] + rgb["g"] + rgb["r"]
font = "$" + invertedColor(c)
back = IIF("$" + c = "$000000", "$000001", "$" + c) // $000000は$FFFF00になるので$000001
msg = "(x, y)<#TAB>(" + x + ", " + y + ")<#CR>" + _
"赤<#TAB>" + rgb["r"] + "(" + hexToDec(rgb["r"]) + ")" + "<#CR>" + _
"緑<#TAB>" + rgb["g"] + "(" + hexToDec(rgb["g"]) + ")" + "<#CR>" + _
"青<#TAB>" + rgb["b"] + "(" + hexToDec(rgb["b"]) + ")"
DIM ID = GETID(GET_FUKIDASI_WIN)
DIM ofs = 25
fx = x + IIF(x >= G_SCREEN_W / 2, -1 * (STATUS(ID, ST_WIDTH) + ofs), ofs)
fy = y - STATUS(ID, ST_HEIGHT) * (y / G_SCREEN_H)
FUKIDASI(msg, fx, fy, IIF(x >= G_SCREEN_W / 2, 4, 3), 10, "メイリオ", font, back)
SLEEP(0.001)
WEND
マウス位置の色を取得
マウス位置の色情報を取得します。
SETHOTKEY(VK_ESC, EMPTYPARAM, "forceQuit")
WHILE TRUE
DIM c = PEEKCOLOR(G_MOUSE_X, G_MOUSE_Y)
DIM r = c AND $FF
DIM g = (c AND $FF00) / $100
DIM b = (c AND $FF0000) / $10000
FUKIDASI("赤<#TAB>" + r + "<#CR>緑<#TAB>" + g + "<#CR>青<#TAB>" + b)
SLEEP(0.001)
WEND
関連記事
- ACW関数 (スクリプト関数)
- 指定したIDのウィンドウの位置・サイズを変更します。IDのみを指定した場合、そのウィンドウをアクティブにします。
- CHKIMG関数 (スクリプト関数)
- 指定画像が画面上にあるかチェックしあればその情報を返します。
- invertedColor関数 (自作関数)
- RGBの各成分、Color値、もしくは#RRGGBB形式の文字列から反転色を返します。返り値は引数と同じ形式で返します。
- STATUS関数 (スクリプト関数)
- ウィンドウの各種状態を取得します。タイトル・クラス名・X座標・Y座標・幅・高さなどを取得することができます。
- BGRToColor関数 (自作関数)
- 引数に指定された青成分、緑成分、赤成分、もしくは#BBGGRR形式の文字列からColor値を求めます。
- RGBToColor関数 (自作関数)
- 引数に指定された赤成分、緑成分、青成分、もしくは#RRGGBB形式の文字列からColor値を求めます。
- colorToBGR関数 (自作関数)
- Color値を青成分、緑成分、赤成分に分解し格納した配列で返します。各成分は10進数の値で表されます。flgにTrueを指定した場合、#BBGGRRの形式で返します。
- colorToRGB関数 (自作関数)
- Color値を赤成分、緑成分、青成分に分解し格納した配列で返します。各成分は10進数の値で表されます。flgにTrueを指定した場合、#RRGGBBの形式で返します。
- EXEC関数 (スクリプト関数)
- EXECは、第一引数に指定したアプリを起動する関数です。そのウィンドウのIDを戻値として返します。ストアアプリ・エクスプローラなどの別プロセスを呼ぶアプリはIDを返さないことがあるので、起動した後にGETIDで取得します。
- MONITOR関数 (スクリプト関数)
- MONITOR関数は、指定したモニタ番号・取得項目の情報を取得します。取得項目には、X座標・Y座標・幅・高さ・モニター名があります。引数なしの場合はモニターの数を返します。