PEEKCOLORピークカラー関数

本ページには広告が含まれています。

指定位置の色情報を取得します。戻り値は0#000000)~16777215#FFFFFF)の間の数値で返されます。指定できる座標の範囲は(x, y) = (0, 0)から(G_SCREEN_W-1, G_SCREEN_H-1)の範囲です。

構文
  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、黄:$00FFFF
RGB値 例) 赤:$FF0000、緑:$00FF00、青:$0000FF、オレンジ:$FF8000、黄:$FFFF00

使い方

Color値から各成分を求める

AND(論理積)を使うことでColor値から各成分を求めることができます。

以下はカーソル位置の座標のColor値を一度だけ取得し、その値から赤成分、緑成分、青成分を計算で求めるプログラムです。

UWSC
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関数の実行のタイミングで対象座標の色が変化すると正しく取得できない場合もあり得ます。

UWSC
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値で取得します。

UWSC
PRINT PEEKCOLOR(100, 100)
結果
プレーンテキスト
13421772

Color値ではなく各成分で取得したい場合は、colorToRGB関数 (自作関数)もしくはcolorToBGR関数 (自作関数)を使います。

以下はPEEKCOLOR関数で返されたColor値を#RRGGBB形式にする例です。

UWSC
PRINT colorToRGB(PEEKCOLOR(100, 100), TRUE)
結果
プレーンテキスト
#CCCCCC

カーソル位置の色情報を吹き出しに表示

カーソル位置の色情報を吹き出しに表示します。

UWSC
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で強制終了するようにしています。

色変化があった場合ループを抜けメッセージを表示します。

UWSC
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形式に揃えて比較することも可能です。

UWSC
SETHOTKEY(VK_ESC, EMPTYPARAM, "forceQuit")

REPEAT
	SLEEP(0.001)
UNTIL PEEKCOLOR(0, 50) = RGBToColor("#FFFFFF")

FUKIDASI("指定座標の色が一致しました")
SLEEP(1.000)

プログラム実行例

カーソル座標と色情報を取得

UWSC
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
結果
rgb.png

マウス位置の色を取得

マウス位置の色情報を取得します。

UWSC
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進数の値で表されます。flgTrueを指定した場合、#BBGGRRの形式で返します。
colorToRGB関数 (自作関数)
Color値を赤成分、緑成分、青成分に分解し格納した配列で返します。各成分は10進数の値で表されます。flgTrueを指定した場合、#RRGGBBの形式で返します。
EXEC関数 (スクリプト関数)
EXECは、第一引数に指定したアプリを起動する関数です。そのウィンドウのIDを戻値として返します。ストアアプリ・エクスプローラなどの別プロセスを呼ぶアプリはIDを返さないことがあるので、起動した後にGETIDで取得します。
MONITOR関数 (スクリプト関数)
MONITOR関数は、指定したモニタ番号・取得項目の情報を取得します。取得項目には、X座標・Y座標・幅・高さ・モニター名があります。引数なしの場合はモニターの数を返します。