Position auf Fenster anhand Farbcode bestimmen

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
TomS
Beiträge: 1508
Registriert: 23.12.2005 12:41
Wohnort: München

Position auf Fenster anhand Farbcode bestimmen

Beitrag von TomS »

Hallihallo.
Gibt es eine Möglichkeit die Koordinaten zu bekommen, von etwas das eine bestimmte Farbe hat?

Bild

In diesem Bereich gibts nichts weißes außer den Kreis (außerhalb dieses Bereiches gibt es schon weiße Bereiche. Ich kenn aber die x,y Koordinaten so wie Höhe und Breite des Bereiches)

Kann ich die exakten Koordinaten (innerhalb des Bereiches oder am besten vom Desktop (links oben)) irgendwie herausfinden?

Danke schonmal.
marco2007
Beiträge: 906
Registriert: 26.10.2006 13:19
Kontaktdaten:

Beitrag von marco2007 »

Meinst Du in etwa so?

Code: Alles auswählen

OpenWindow(0, 10,10, 50,50, "2d-test")
If StartDrawing(WindowOutput(0))
Circle(23,23, 2, RGB(0,0,0))
Circle(45,45, 3, RGB(0,0,0))
EndIf

For x=0 To 50
  For y=0 To 50
    If Point(x,y)=RGB(0,0,0)
      Debug "x=" + Str(x) + " y="+Str(y)
    EndIf
  Next y
  Next x

;Repeat:Until WaitWindowEvent()=#PB_Event_CloseWindow
Windows 11 - PB 6.03 x64
_________________________________
Benutzeravatar
TomS
Beiträge: 1508
Registriert: 23.12.2005 12:41
Wohnort: München

Beitrag von TomS »

Das würde im Prinzip funktionieren, hab ich mir auch schon gedacht. Aber dann müsste ich den Desktop abfotografieren, den Bereich aussschneiden und dann auf dieser Fläche jeden Pixel mit Point abfragen. Wobei der Kreis so groß ist, dass jeder 10. reichen würde.

Wenn es keine andere Möglichkeit gibt, muss ich das ja so machen.
marco2007
Beiträge: 906
Registriert: 26.10.2006 13:19
Kontaktdaten:

Beitrag von marco2007 »

...kannst mit dem was anfangen?

Code: Alles auswählen

If OpenWindow(0, 10,10, 50,50, "Mauskoordinaten") 
EndIf

Repeat
  event=WindowEvent()
    Debug "x=" + Str(DesktopMouseX())+ " y="+ Str(DesktopMouseY())
    Delay(10)

Until event=#PB_Event_CloseWindow
Windows 11 - PB 6.03 x64
_________________________________
Benutzeravatar
TomS
Beiträge: 1508
Registriert: 23.12.2005 12:41
Wohnort: München

Beitrag von TomS »

Joah. Das hab ich ja alles schon. Aber damit müsste man beim Programstart erst die Maus auf den Kreisbewegen.

Ich habs jetzt anders gelöst. Am Anfang wird der Kreis in die linke obere Ecke verschoben. Somit wird das Fenster kalibriert und ich kann mi relativen Koordinaten arbeiten. Wenn ich die Maus für was anderes braucht, als den Kreis zu verschieben, wird die letzte absolute Cursorposition gespeichert und danach wieder abgerufen.

Das funktioniert wunderbar. Hat halt den Nachteil, dass die aller erste Position -unendlich/-unendlich sein muss. Aber das kann ich glaube ich verkraften. Danke für deine Bemühungen.
K.Putt
Beiträge: 122
Registriert: 01.09.2006 00:17

Beitrag von K.Putt »

Hallo,

mit GetPixel_(HDC,Posx,Posy) [Win-Api]
kannst Du nach einer bestimmten Farbe in Deinem Fenster suchen.

Du müsstest dazu Du Grösse Deines Fensters, bzw. Bereichs auslesen,
dann in 2 Schleifen alle x und alle y nacheinander absuchen, triffst Du die Farbe, weisst Du die Koordinaten.

HDC = Handle of Device Context müsstest Du ermitteln mit
GetDC_(WindowID(#Window))
Suchst Du in einem externen Fenster, z.B einen Fullscreen kannst Du es mit
FindWindow_(#Null, Fenstertitel.s)
Der Fenstertitel muss dann natürlich vorher bekannt sein.

Die Geschwindigkeit lässt allerdings sehr zu wünschen übrig, brauchst Du das aber nur 1x (beim Programmstart) ist das nicht so das Problem,
ansonsten halte den Suchbereich möglichst klein oder versuch es dann mit
GetDIBits_()
Dabei kann ich Dir allerdings nicht weiterhelfen.

Mfg
PB 5.x & Win 7 64Bit
Benutzeravatar
Xaby
Beiträge: 2144
Registriert: 12.11.2005 11:29
Wohnort: Berlin + Zehdenick
Kontaktdaten:

Beitrag von Xaby »

Kinder an die Macht http://scratch.mit.edu/
Benutzeravatar
TomS
Beiträge: 1508
Registriert: 23.12.2005 12:41
Wohnort: München

Beitrag von TomS »

Nein. Ich arbeite immernoch an diesem Projekt: http://www.purebasic.fr/german/viewtopi ... highlight=

Bin aber jetzt fertig damit. Alles funktioniert perfekt.

@all: Danke, aber ich habe das Problem jetzt anderweitige gelöst (siehe oben)
Antworten