Farbe unterm Mauscursor

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
Kekskiller
Beiträge: 752
Registriert: 14.09.2004 21:39
Kontaktdaten:

Farbe unterm Mauscursor

Beitrag 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.
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag 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: ?
Bild
Benutzeravatar
Rings
Beiträge: 977
Registriert: 29.08.2004 08:48

Beitrag 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())
Rings hat geschrieben:ziert sich nich beim zitieren
Benutzeravatar
MVXA
Beiträge: 3823
Registriert: 11.09.2004 00:45
Wohnort: Bremen, Deutschland
Kontaktdaten:

Beitrag von MVXA »

ach menno -_-. Gut in der MSDN rum gesurft -_-...
Bild
Kekskiller
Beiträge: 752
Registriert: 14.09.2004 21:39
Kontaktdaten:

Beitrag von Kekskiller »

*freu* Kekse für alle :mrgreen: !
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag 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?
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Rings
Beiträge: 977
Registriert: 29.08.2004 08:48

Beitrag 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 .
Rings hat geschrieben:ziert sich nich beim zitieren
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag 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 ;) .
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
Andre
PureBasic Team
Beiträge: 1765
Registriert: 11.09.2004 16:35
Computerausstattung: MacBook Core2Duo mit MacOS 10.6.8
Lenovo Y50 i7 mit Windows 10
Wohnort: Saxony / Deutscheinsiedel
Kontaktdaten:

Beitrag 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)
Bye,
...André
(PureBasicTeam::Docs - PureArea.net | Bestellen:: PureBasic | PureVisionXP)
Antworten