我如何获得屏幕上某一点的颜色?谢谢?

解决方案 »

  1.   

    首先你要明白你要取的是那个窗口的点的RGB。
    有下面的这三个函数应该就可以了.例子:
    GetPixel(GetDC(WindowFromPoint(320,100)),320,100)
    ————————————————————————————————————————————————
    WindowFromPoint VB声明 
    Declare Function WindowFromPoint Lib "user32" Alias "WindowFromPoint" (ByVal xPoint As Long, ByVal yPoint As Long) As Long 
    说明 
    返回包含了指定点的窗口的句柄。忽略屏蔽、隐藏以及透明窗口 
    返回值 
    Long,包含了指定点的窗口的句柄。如指定的点处没有窗口存在,则返回零 
    参数表 
    参数 类型及说明 
    xPoint Long,x点值 
    yPoint Long,y点值 
    GetDC VB声明 
    Declare Function GetDC Lib "user32" Alias "GetDC" (ByVal hwnd As Long) As Long 
    说明 
    获取指定窗口的设备场景 
    返回值 
    Long,指定窗口的设备场景句柄,出错则为0 
    参数表 
    参数 类型及说明 
    hwnd Long,将获取其设备场景的窗口的句柄。若为0,则要获取整个屏幕的DC 
    注解 
    若窗口所属类具有CS_OWNDC, CS_CLASSDC 或 CS_PARENTDC样式,则获取的设备场景属窗口或类专有。vb的窗体和图片框控件也是这种情况,它用该函数取得的结果和控件的hdc属性相同(在autoredraw为FALSE时)。您无须考虑取回的窗体或图片框控件设备场景的默认状态,特别是绘图对象。另外,默认状态随着窗体和控件autoredraw属性的设置而不同。在设备场景释放前您必须回复其状态为初始值。对于没有CS_OWNDC, CS_CLASSDC 或 CS_PARENTDC样式的窗口的设备场景,可从通用windows缓存中获取,其状态为默认值。缓存中可用设备场景数量是有限的,因此只要可能就释放设备场景
    用本函数获取的设备场景一定要用ReleaseDC函数释放,不能用DeleteDC
     
    GetPixel VB声明 
    Declare Function GetPixel Lib "gdi32" Alias "GetPixel" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long 
    说明 
    在指定的设备场景中取得一个像素的RGB值 
    返回值 
    Long,指定点的RGB颜色。如指定的点位于设备场景的剪切区之外,则返回CLR_INVALID 
    参数表 
    参数 类型及说明 
    hdc Long,一个设备场景的句柄 
    x,y Long,逻辑坐标中要检查的点 
    注解 
      

  2.   

    这个有问题,鼠标在非工作区没用GetPixel(GetDC(0))即可
    GetDC(0)取屏幕的hDC
      

  3.   

    Option Explicit
    Private Declare Function GetPixel Lib "gdi32" (ByVal hdc As Long, ByVal x As Long, ByVal y As Long) As Long
    Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
    Private Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, ByVal hdc As Long) As Long
    Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
    Private Type POINTAPI
            x As Long
            y As Long
    End Type
    Dim dc As Long
    Dim l As LongPrivate Sub Form_Load()
        dc = GetDC(0)
    End SubPrivate Sub Form_Unload(Cancel As Integer)
        ReleaseDC dc, 0
    End SubPrivate Sub Timer1_Timer()
        Dim p As POINTAPI
        GetCursorPos p
        l = GetPixel(dc, p.x, p.y)
        Picture1.BackColor = l
        If l < 0 Then
            l = l + 2 ^ 31
        End If
        Dim r As Byte
        Dim g As Byte
        Dim b As Byte
        r = l Mod 256
        g = (l \ 256) Mod 256
        b = (l \ 65536) Mod 256
        Me.Caption = Str(r) & ":" & Str(g) & Str(b) & " -- " & Hex(r) & ":" & Hex(g) & Hex(b)
    End Sub