PEEKCOLOR関数は、指定位置の色情報を取得する関数です。戻値はBGRのカラーコードを16進数で表記した6桁です。色成分を分けて取得するには第三引数に取得する色を指定するか、論理積(AND)で成分を分解して取得します。
- 構文
- Integer = PEEKCOLOR( X, Y, [RGB指定, クリップボード指定] )
- 引数
- X、Y
- 座標 X、Y
- RGB指定
- 0
- BGR値にて返す (デフォルト)
- COL_RGB(3)
- RGB値にて返す
- COL_R(4)
- 赤の成分のみを返す
- COL_G(5)
- 緑の成分のみを返す
- COL_B(6)
- 青の成分のみを返す
- クリップボード指定
- FALSE
- 画面より(デフォルト)
- TRUE
- クリップボードより
- 戻り値
- 指定位置の色情報BGR値 例) 青:$FF0000、緑:$00FF00、赤:$0000FF、オレンジ:$0080FF、黄:$00FFFFRGB値 例) 赤:$FF0000、緑:$00FF00、青:$0000FF、オレンジ:$FF8000、黄:$FFFF00
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
プログラム実行例
カーソル座標と色情報を取得
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
//////////////////////////////////////////////////
// 【引数】
// callback : 配列の各要素に適用するコールバック関数
// array : コールバック関数を適用する配列
// 【戻値】
// callback関数を適用した後、 適用後の要素を含む配列
//////////////////////////////////////////////////
PROCEDURE arrayMap(callback, var array[])
DIM tmp[RESIZE(array)]
DIM n = 0
FOR %val% IN array
tmp[n] = EVAL(callback)
n = n + 1
NEXT
RESIZE(array, RESIZE(tmp))
FOR n = 0 TO RESIZE(tmp)
array[n] = tmp[n]
NEXT
FEND
//////////////////////////////////////////////////
// 【引数】
// color : Color値
// 【戻値】
// 赤成分、緑成分、青成分を格納した配列
//////////////////////////////////////////////////
FUNCTION colorToRGB(color)
DIM array[2]
array[0] = color AND $FF
array[1] = (color AND $FF00) / $100
array[2] = (color AND $FF0000) / $10000
RESULT = SLICE(array)
FEND
//////////////////////////////////////////////////
// 【引数】
// dec : 10進数
// 【戻値】
// 16進数に変換した値
//////////////////////////////////////////////////
FUNCTION decToHex(dec)
RESULT = FORMAT(VAL(dec), 0, -1)
FEND
//////////////////////////////////////////////////
// 【引数】
// hex : 16進数
// 【戻値】
// 10進数に変換した値
//////////////////////////////////////////////////
FUNCTION hexToDec(hex)
dec = 0
hex = STRCONV(hex, SC_LOWERCASE)
FOR n = 1 TO LENGTH(hex)
str = COPY(hex, n, 1)
IFB CHKNUM(str) THEN
num = str
ELSE
num = ASC(str) - 87
ENDIF
dec = dec + (num * POWER(16, LENGTH(hex) - n))
NEXT
RESULT = dec
FEND
//////////////////////////////////////////////////
// 【引数】
// expr : 評価する式
// truepart : 評価した式がTrueのときに返す値
// falsepart : 評価した式がFalseのときに返す値
// 【戻値】
// truepart : 評価した式がTrueのとき、falsepart : 評価した式がFalseのとき
//////////////////////////////////////////////////
FUNCTION IIF(expr, truepart, falsepart)
IFB EVAL(expr) THEN
RESULT = truepart
ELSE
RESULT = falsepart
ENDIF
FEND
//////////////////////////////////////////////////
// 【引数】
// color : Color値
// 【戻値】
// 反転色
//////////////////////////////////////////////////
FUNCTION invertedColor(color)
DIM array = colorToRGB(color)
arrayMap(255 + " - %val%", array)
RESULT = RGBToColor(array[0], array[1], array[2])
FEND
//////////////////////////////////////////////////
// 【引数】
// r : 赤成分
// g : 緑成分
// b : 青成分
// 【戻値】
// Color値
//////////////////////////////////////////////////
FUNCTION RGBToColor(r, g, b)
RESULT = r + g * 256 + b * 65536
FEND
- 結果
マウス位置の色を取得
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
//////////////////////////////////////////////////
// 【引数】
//
// 【戻値】
//
//////////////////////////////////////////////////
PROCEDURE forceQuit()
EXITEXIT
FEND
解説
- 1行目
- ホットキーを設定する。ESCキーでforceQuit関数を呼び出す。
SETHOTKEY(VK_ESC, EMPTYPARAM, "forceQuit")
- 3行目
- 無限ループ開始。
WHILE TRUE
- 4行目
- マウス位置のBGR値を取得。例)c = 16513269 = 0xFBF8F5 = 11111011 11111000 11110101b。
DIM c = PEEKCOLOR(G_MOUSE_X, G_MOUSE_Y)
c = 16513269 B G R 16進数 FB F8 F5 2進数 11111011 11111000 11110101
- 5行目
- BGR値からR成分を取得。F5が返ります。
DIM r = c AND $FF
B G R c 11111011 11111000 11110101 $FF 11111111 c AND $FF 11110101
- 6行目
- BGR値からG成分を取得。F8が返ります。
DIM g = (c AND $FF00) / $100
B G R c 11111011 11111000 11110101 $FF00 11111111 00000000 c AND $FF00 11111000 00000000
- 7行目
- BGR値からB成分を取得。FBが返ります。
DIM b = (c AND $FF0000) / $10000
B G R c 11111011 11111000 11110101 $FF0000 11111111 00000000 00000000 c AND $FF0000 11111011 00000000 00000000
- 8行目
- 各成分を吹き出しに表示。
FUKIDASI("赤" + r + "緑" + g + "青" + b)
関連記事
- ACW (スクリプト関数)
- 指定したIDのウィンドウの位置・サイズを変更します。IDのみを指定した場合、そのウィンドウをアクティブにします。
- STATUS (スクリプト関数)
- ウィンドウの各種状態を取得します。タイトル・クラス名・X座標・Y座標・幅・高さなどを取得することができます。
- invertedColor
- 引数に指定したColor値の反転色を返します。
- CHKIMG (スクリプト関数)
- 指定画像が画面上にあるかチェックしあればその情報を返します。
- colorToBGR
- Color値を青成分、緑成分、赤成分に変換し配列で返します。
- BGRToColor
- 引数に指定された青成分、緑成分、赤成分からColor値を求めます。
- colorToRGB
- Color値を赤成分、緑成分、青成分に変換し配列で返します。
- RGBToColor
- 引数に指定された赤成分、緑成分、青成分からColor値を求めます。
- EXEC (スクリプト関数)
- EXECは、第一引数に指定したアプリを起動する関数です。そのウィンドウのIDを戻値として返します。ストアアプリ・エクスプローラなどの別プロセスを呼ぶアプリはIDを返さないことがあるので、起動した後にGETIDで取得します。
- MONITOR (スクリプト関数)
- MONITOR関数は、指定したモニタ番号・取得項目の情報を取得します。取得項目には、X座標・Y座標・幅・高さ・モニター名があります。引数なしの場合はモニターの数を返します。
- MOUSEORG (スクリプト関数)
- マウス座標を相対座標にする、 またはマウスとキー情報を直接ウィンドウへ送ります。
- BALLOON (スクリプト関数)
- 指定したメッセージを吹き出しで表示します。
- FUKIDASI (スクリプト関数)
- 指定したメッセージを吹き出しで表示します。MSGBOX関数と違い処理を中断することはありません。BALLOON関数も同じく吹き出しを表示する関数です。
- Borders.ColorIndex プロパティ (Excel)
- 罫線または輪郭線の色を表す値を取得または設定します。
- complementaryColor
- 引数に指定したColor値の補色を返します。
- SAVEIMG (スクリプト関数)
- SAVEIMGは、第一引数に指定した絶対パス・相対パスに画像を保存する関数です。第一引数を省略した場合クリップボードに、第二引数に0を指定でスクリーン全体をコピーします。
- Borders.Color プロパティ (Excel)
- 罫線の色を取得または設定します。