Seite 1 von 1

Position auf Fenster anhand Farbcode bestimmen

Verfasst: 06.05.2007 15:29
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.

Verfasst: 06.05.2007 15:57
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

Verfasst: 06.05.2007 16:09
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.

Verfasst: 06.05.2007 16:50
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

Verfasst: 06.05.2007 17:59
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.

Verfasst: 07.05.2007 00:48
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

Verfasst: 07.05.2007 15:31
von Xaby

Verfasst: 07.05.2007 17:51
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)