Finden von Fenster in einem Screenshot (Bildvergleich) oder anderen Weg ?

  • Themenstarter Themenstarter TobiNeu
  • Beginndatum Beginndatum
T

TobiNeu

Hi,

ich habe folgendes Problem:
- Ich muss ein Fenster mit variabler Größe in einem Screenshot/Desktop finden.
- Obere Menüleiste und untere Leiste haben IMMER die selbe Breite.
- Das Icon im oberen linken Eck ist immer identisch
- Das Programm sollte später eventuell erweiterbar sein um mehrere Fenster zu erkennen.
(Das würde ich eventuell dann so lösen das ich sowas einbaue wie : suche Icon solange IconPos != Pos_der_bisher_gefundenen_Instanzen)

Bisher habe ich es so versucht, dass ich ein screenshot mache und das Icon (linkes obere eck des fensters) mit dem screenshot vergleicht:

findIcon(img1, img2, distance) {
//...
}

Der Funktion übergebe ich das Icon, den Screenshot und eine distance (max Abweichung)

nun vergleich ich den ersten pixel von dem icon mit dem ersten pixel des screenshot und überprüfe ob die summe der abweichung < distance ist
Verwendet tu ich die getRGB(int.int) Methode.

Das funktioniert so auch, doch leider ist die Funktion so lahm.
Dauert bis zu 2 Minuten. Und das ist ja nur die obere linke Position ...


Ich habe aber ein max Zeitfenster von 30 Sekunden.

Jemand ne Idee wie ich das optimieren kann oder einen Tipp einer schnelleren Funktion, Lib ?

Es muss nicht zwingend mit Hilfe eines Screenshot gelöst werden. Falls es andere schnellere Wege gibt ist das auch ok


Vielen Dank
 
Hey,

wenn ich das richtig verstehe, willst du eine Java Anwendung schreiben, die dir die Position irgendeines beliebigen Fensters auf deinem derzeitigen Desktop findet? Das Fenster muss aber nicht von der Java-App gezeichnet worde sein, richtig?
Falls du das über Bildverarbeitung lösen willst kannst du mal nach der OpenCV Lib gucken. Ein Kumpel meinte letztens die gibt es auch als JavaOpenCV. Kann ich aber im Moment weder bestätigen noch verneinen. Zur Not gibt es ja noch das JNI. ;)

Gruß
Der Wolf
 
Beliebig ist das Fenster nicht soll später schon ein bestimmtes sein.
Aber ja die Fenster sind nicht von Java gezeichnet.

OpenCV für Java hört sich gut an. Die habe ich unter C/C++ in meiner Diplomarbeit verwendet, aber damals gabs die noch nicht für Java :)

Nach JNI werde ich auch mal googlen.
Vielen Dank
 
Zurück