指定座標のRGB値を取得(U)          <TOP>


指定座標のRGB値を取得します。

GetCursorPos マウスカーソル(マウスポインタ)の現在の位置に相当するスクリーン座標を取得

GetPixel 指定された座標のピクセルのRGB値を取得

GetWindowDC ウィンドウ全体のデバイスコンテキストを取得

ReleaseDC デバイスコンテキストを解放

 

例ではウインドウ全体のデバイスコンテキストを取得し、カーソル位置のRGB値を取得し、その値および色を表示しています。

 

 

色あわせに使うことが多いので、exeファイルにしてみました。

GetRGB.lzh

 

'================================================================
'= 指定座標のRGB値を取得
'=    (GetPixel2.bas)
'================================================================
#include "Windows.bi"

Type POINTAPI
    x As Long
    y As Long
End Type

' マウスカーソル(マウスポインタ)の現在の位置に相当するスクリーン座標を取得
Declare Function Api_GetCursorPos& Lib "user32" Alias "GetCursorPos" (lpPoint As POINTAPI)

' 指定された座標のピクセルのRGB値を取得
Declare Function Api_GetPixel& Lib "gdi32" Alias "GetPixel" (ByVal hDC&, ByVal X&, ByVal Y&)

' ウィンドウ全体のデバイスコンテキストを取得。0(NULL)を指定すると、スクリーン全体のデバイスコンテキストを取得
Declare Function Api_GetWindowDC& Lib "user32" Alias "GetWindowDC" (ByVal hWnd&)

' デバイスコンテキストを解放
Declare Function Api_ReleaseDC& Lib "user32" Alias "ReleaseDC" (ByVal hWnd&, ByVal hDC&)

Var Shared Timer1 As Object
Var Shared Picture1 As Object
Var Shared Text(6) As Object

Timer1.Attach GetDlgItem("Timer1")
Picture1.Attach GetDlgItem("Picture1")
For i = 0 To 6
    Text(i).Attach GetDlgItem("Text" & Trim$(Str$(i + 1)))
    Text(i).SetFontSize 14
Next

'================================================================
'=
'================================================================
Declare Sub MainForm_Start edecl ()
Sub MainForm_Start()
    Timer1.SetInterval 10
    Timer1.Enable -1
End Sub

'================================================================
'=
'================================================================
Declare Sub Timer1_Timer edecl ()
Sub Timer1_Timer()
    Var pAPI As POINTAPI
    Var Col As String
    Var lColor As Long
    Var lDC As Long
    Var Ret As Long

    lDC = Api_GetWindowDC(0)

    Ret = Api_GetCursorPos(pAPI)
    lColor = Api_GetPixel(lDC, pAPI.x, pAPI.y)

    Picture1.SetBackColor lColor
    Picture1.cls

    Col = Right$("000000" & Hex$(lColor), 6)
    Text(1).SetWindowText Right$(Col, 2)
    Text(2).SetWindowText Mid$(Col, 3, 2)
    Text(3).SetWindowText Left$(Col, 2)

    Text(4).SetWindowText Trim$(Str$(Val("&H" & Right$(Col, 2))))
    Text(5).SetWindowText Trim$(Str$(Val("&H" & Mid$(Col, 3, 2))))
    Text(6).SetWindowText Trim$(Str$(Val("&H" & Left$(Col, 2))))
    Ret = Api_ReleaseDC(0, lDC) 
End Sub

'================================================================
'=
'================================================================
While 1
    WaitEvent
Wend
Stop
End