Seite 1 von 1

Farbe unterm Mauscursor

Verfasst: 08.04.2005 20:23
von Kekskiller
Suche eine Funktion, die mir die/den Farbwert/Farbwerte zurückgibt, der im Moment unter der Maus ist. Am besten so in der Art:

Code: Alles auswählen

col = GetColorUnderMouse()
Danke schonmal im Voraus.

Verfasst: 08.04.2005 20:48
von MVXA

Code: Alles auswählen

Procedure GetColorUnderMouse()
    DefType.l imgPoint, lngDC, lngMemDC, lngColor
    DefType.POINT CursorPos
    
    GetCursorPos_(@CursorPos)
    lngDC = GetDC_(0) 
    
    imgPoint = CreateImage(#PB_Any, 5, 5)
    lngMemDC = CreateCompatibleDC_(lngDC)
    SelectObject_(lngMemDC, ImageID())
    BitBlt_(lngMemDC, 0, 0, 5, 5, lngDC, CursorPos\x, CursorPos\y, #SRCCOPY)
    DeleteDC_ (lngMemDC)
    ReleaseDC_(0, lngDC) 
    
    If StartDrawing(ImageOutput())
        lngColor = Point(1, 1)
        StopDrawing()
    EndIf 
    
    ProcedureReturn lngColor
EndProcedure
Das hier sollte fürs erste reichen :allright:. Was bekomme ich jetzt :mrgreen: ?

Verfasst: 08.04.2005 20:59
von Rings
sorry, konnte ich nich wiederstehen:

Windows-Api version:

Code: Alles auswählen

Procedure GetColorUnderMouse()
 GetCursorPos_(@CursorPos.POINT )
 ProcedureReturn GetPixel_(GetDC_(0),CursorPos\x,CursorPos\y)  
EndProcedure

Debug Hex(GetColorUnderMouse())

Verfasst: 08.04.2005 21:10
von MVXA
ach menno -_-. Gut in der MSDN rum gesurft -_-...

Verfasst: 08.04.2005 21:24
von Kekskiller
*freu* Kekse für alle :mrgreen: !

Verfasst: 09.04.2005 10:13
von Kaeru Gaman
seit ihr denn sicher, daß wirklich die Farbe unter dem Maus-Zeiger ermittelt wird,
und nicht die Farbe des Maus-Zeigers selbst?

Verfasst: 09.04.2005 10:50
von Rings
Kaeru Gaman hat geschrieben:seit ihr denn sicher, daß wirklich die Farbe unter dem Maus-Zeiger ermittelt wird,
und nicht die Farbe des Maus-Zeigers selbst?
ja, bewege einfach die mouse und drück F5 in PB .

Verfasst: 09.04.2005 12:10
von DarkDragon
Naja, aber man sollte doch ein DC auch immer wieder releasen, oder etwa nicht?

Code: Alles auswählen

Procedure GetColorUnderMouse()
 GetCursorPos_(@CursorPos.POINT )
 hDC = GetDC_(0)
 If hDC <> 0
 Color = GetPixel_(hDC,CursorPos\x,CursorPos\y)
 ReleaseDC_(0, hDC)
 ProcedureReturn Color
 EndIf
EndProcedure

Debug Hex(GetColorUnderMouse())
[EDIT] Und testen ob das hDC gültig ist wäre auch empfehlenswert ;) .

Verfasst: 09.04.2005 17:14
von Andre
Wenn wir schon beim Code vergrößern sind, dann gleich noch die Rückgabewerte in jedem brauchbaren Format: :wink:

Code: Alles auswählen

Procedure GetColorUnderMouse() 
  GetCursorPos_(@CursorPos.POINT ) 
  hDC = GetDC_(0) 
  If hDC <> 0 
    Color = GetPixel_(hDC,CursorPos\x,CursorPos\y) 
    ReleaseDC_(0, hDC) 
    ProcedureReturn Color 
  EndIf 
EndProcedure 

color.l = GetColorUnderMouse()

Debug "Color:"
Debug color

Debug "Color in Hex format:"
Debug Hex(color)

Debug "Color in RGB values:"
Debug Red(color)
Debug Green(color)
Debug Blue(color)