Farbcode ignorieren

05/06/2013 22:09 paddygamer#1
Moin,Moin

Gibt es eine möglichkeit In AutoIt sozusagen eine bestimmte Farbe komplett zu ignorieren? Weil ich die Imagesearch Funktion benutze und um nach bestimmten Bildern zu suchen z.B:


☺☺☺ (1)

☺ (2)



☺☺☺ (3)




Es sind Immer 3-4er Konstelationen von bestimmten Farbblöcken, die Ich suchen Möchte, wie schemenhaft in den Bsp 1,2,3 gezeigt.
1 und 2 sind ja kein Problem, da man dort einen Liniaren schnitt macht und diese "Bilder" wunderbar von Autoit zum Imageseach benutzt werden können.
Allerdings ist, wie man in Bsp 3 sehen kann dort die konstelation sozusagen "Über Eck" was bedeutet wenn man diese ausschneidet, bleibt bei Paint z.b darunter alles weiß.

Bsp:

[Only registered and activated users can see links. Click Here To Register...]



Das ganze habe ich auch schon mit Photoshop und Transparenz gemacht, was allerdings auch nicht viel gebracht hat. Nun ist meine Frage kann man Auto It sagen: Ignoriere den Farbcode XXX KOMPLETT für das ganze Script?
Damit man den "Hintergrund" von Objekten, die man suchten will Rot o.a machen kann um somit dem Script zu sugerrieren das diese Farbe gar nicht vorhanden ist bzw. nicht verwendet wird
05/06/2013 22:48 butter123#2
lass nach der einen seite suchen und falls die gefunden wurde nach der 2.. sind die nah genug zusammen, sodass sie eine ecke bilden, dann hastes gefunden.
05/06/2013 23:53 paddygamer#3
Quote:
Originally Posted by butter123 View Post
lass nach der einen seite suchen und falls die gefunden wurde nach der 2.. sind die nah genug zusammen, sodass sie eine ecke bilden, dann hastes gefunden.
Gibts da echt keine elegantere Methode?
05/07/2013 00:04 omer36#4
wenn es wirklich nicht mit ner transparenten funktioniert (was mich schon verwundert), musst du es wohl nacheinander abfragen
05/07/2013 16:28 paddygamer#5
Quote:
Originally Posted by omer36 View Post
wenn es wirklich nicht mit ner transparenten funktioniert (was mich schon verwundert), musst du es wohl nacheinander abfragen
Wnn du Zeit hast könntest du es ja mal Probieren Imagesearch mit Transparentem Hintergrund.Vllt haben dabei auch meine 1337-Noob Skillz in GIMP versagt und das Bild war nicht richtig angepasst o.ä.
05/07/2013 16:34 butter123#6
wenn die bilder immer an der selben position sind, kannst du auch mit pixelgetcolour arbeiten.
05/08/2013 00:59 paddygamer#7
Quote:
Originally Posted by butter123 View Post
wenn die bilder immer an der selben position sind, kannst du auch mit pixelgetcolour arbeiten.

Die Sachen tauchen nicht immer an der selber Stelle auf. Aber ich versuche es mal mit Pixelseach gerade.
Das ist in der Theorie, wenn es so etwas, wie ich es mir gerade ausgedacht habe gibt.
Kann man folgendes realisieren?:

Code:
$Variable= PixelSearch(0,0,1920,1080,0x6AF727)
	   If ISArray($Variable) = True then
Nach dem "then" möchte ich sozusagen noch eine weitere Variable einfügen, wenn in einem Pixelradius von 10 (Also 10 Pixel von diesem Punkt aus in alle Richtungen noch ein weiterer Pixel mit der selbern Farbe gefunden wird, dann soll er auf den ersten gefundenen Pixel draufklicken.
05/08/2013 02:37 lolkop#8
etwas ähnliches habe ich vor ewigen zeiten mal für ein browserspiel geschrieben....
im video sieht man das endprodukt bei der arbeit. die logik dahinter basiert auf dem grundgedanken, das es reicht jeweils den mittelpunkt der 64 objekte auszulesen. funktionieren tut das ganze einfach über ein 2d array, welches über pixelgetcolor gefüllt wird.
sobald man das array einmalig gefüllt hat, kann man es beliebig oft mit eigenen algorithmen durchlaufen, um so eventuelle muster zu finden.

der vorteil hier liegt also darinn, das das bild nur einmal "gescannt" werden muss (was ja der sehr zeitaufwändige part ist), was zur folge hat, das danach nurnoch die sehr effiziente verarbeitung des inputs folgen muss. desweiteren muss nicht nach pixeln gesucht werden, da ihre position bereits bekannt ist. man hat in meinem beispiel so nur 8*8 pixel einzulesen anstatt die gesamtfläche von ca 160.000 pixeln ständig durchsuchen zu müssen.

Edit:
in dem beispiel spiel, haben die entwickler nach kurzer zeit eine gewisse abweichung der farben in objekten von ein und dem selben typ eingebaut, um meinen bot untauglich zu machen.
auch das war aber kein problem... ich habe einfach von jedem objekt einen durchschnitts-rgb-wert gespeichert, und dann vom aktuellen objekt jeweils die differenz zu diesem durchschnittswert berechnet. das objekt mit der geringsten abweichung war automatisch das korrekte.