Farbwechselerkennung mit Zeitmessung

JoeJackson

Mitglied
Hallo,
Ich bin Javaanfänger und stehe vor einem Problem.

Ich möchte gerne ein Programm schreiben welches unter angabe von bestimmten Pixeln auf dem Bildschirm die Zeit zwischen den wechsel der Farbwechsel ausgibt.
Bsp.:

Pixel 1524x734 steht auf rot und wechselt irgendwann auf schwarz.
Nun soll das programm ständig im millisekunden bereich mitmessen und ausgeben wie lange der welchsel gedauert hat.
Von rot auf schwarz, von schwarz auf rot usw.

Ich hoffe das funktioniert.

Vielen dank vorab.
 

JoeJackson

Mitglied
Die Frage ist wie das umzusetzen ist.
Geht das überhaupt.
Wenn ja, welche pakete muss ich dazu importieren und mit welchen Klassen arbeiten?

Danke.
 
T

Thomas G

Gast
Hallo ich bin Mechaniker im ersten Lehrjahr und möchte jetzt ein Auto umbauen, damit es statt mit Benzin mit Rübensaft fährt. Welche Teile und welches Werkzeug brauche ich dafür?
 
G

Grummel

Gast
@Thomas G:

Leider Forum und Thema VÖLLIG verfehlt. Wenn du an die richtigen Leute kommst, findest du mit Glück jemanden, der dir bei diesem Unterfangen hilft. Sicher könntest du dabei viel lernen und dass das Benzin durch Rübensaft gut ersetzt wird, bestreitet wohl niemand. Viel Glück!
 

hdi

Top Contributor
JoeJackson,

Das geht wohl nicht ohne Weiteres. Es gibt da keine Klasse oder Methode in der Bibliothek die sowas übernimmt - es ist ja auch eine recht spezielle Anforderung ;)

Ich weiß jetzt auch nicht was sich da am besten anbietet. Du könntest z.B. ständig Screenshots vom Desktop machen und das Bild analysieren. Die Frage ist wie schnell du messen kannst. Ich denke das dauert recht "lange" (damit ist gemeint, du kannst das vllt nicht 1000 mal in der Sekunde machen).

Kannst ja mal versuchen:
How to take a screenshot in JAVA… Technocrat's Perspective

Ob es einen direkteren Weg gibt bezweifle ich.. Du hast aus Java heraus meist keinen Zugriff auf low-level Infos. Vielleicht hat jemand einen anderen Vorschlag.
 

ARadauer

Top Contributor
Hallo ich bin Mechaniker im ersten Lehrjahr und möchte jetzt ein Auto umbauen, damit es statt mit Benzin mit Rübensaft fährt. Welche Teile und welches Werkzeug brauche ich dafür?

Diese Frage und die Frage des Threadstellers sind voll gerechtfertigt. Wenn man keine Ahnung von Rübensaft hat soll mal halt einfach mal die Klappe halten und hier nicht anonym rum spamen..

Du brauchst die Robot Klasse
Machst dir eine Schleife wo du die letze mit der aktuellen Farbe überprüfst und mit Thread.sleep ein bisschen wartest...

zb so....
Java:
import java.awt.AWTException;
import java.awt.Color;
import java.awt.Robot;

public class PixelChangerTest {

    private Robot bot;
    private int x;
    private int y;
    private boolean running = true;
    private Color currentColor;

    public static void main(String[] args) throws AWTException, InterruptedException {

        PixelChangerTest test = new PixelChangerTest(10, 10);
        test.check();
    }

    public PixelChangerTest(int x, int y) throws AWTException, InterruptedException {
        bot = new Robot();
        this.x = x;
        this.y = y;

    }

    public void check() throws InterruptedException {
        currentColor = bot.getPixelColor(x, y);
        // hier den zeitpunkt noch merken
        while (running) {
            Color newColor = bot.getPixelColor(x, y);
            if (!currentColor.equals(newColor)) {
                System.out.println("Farbe von " + currentColor + " auf " + newColor + " geändert");
                currentColor = newColor;
                // hier jetzt zeitdifferenz ausgeben
            }
            Thread.sleep(10);
        }
    }

}
 

JoeJackson

Mitglied
@ARadauer
Cool Danke das funktioniert super!
Ich habe jetzt noch mit der Zeitmessung eingebaut.
[JAVA=42]

package pixelchangertest;
import java.awt.AWTException;
import java.awt.Color;
import java.awt.Robot;

public class PixelChangerTest {

private Robot bot;
private int x;
private int y;
private boolean running = true;
private Color currentColor;




public static void main(String[] args) throws AWTException, InterruptedException {

PixelChangerTest test = new PixelChangerTest(2211, 720);
test.check();
}

public PixelChangerTest(int x, int y) throws AWTException, InterruptedException {
bot = new Robot();
this.x = x;
this.y = y;

}

public void check() throws InterruptedException {

currentColor = bot.getPixelColor(x, y);
java.util.Date today1 = new java.util.Date();
java.sql.Timestamp ts1 = new java.sql.Timestamp(today1.getTime( ));
long tsTim1 = ts1.getTime();
System.out.println(tsTim1);

while (running) {


Color newColor = bot.getPixelColor(x, y);
if (!currentColor.equals(newColor)) {
System.out.println("Farbe von " + currentColor + " auf " + newColor + " geändert");
currentColor = newColor;

java.util.Date today2 = new java.util.Date();
java.sql.Timestamp ts2 = new java.sql.Timestamp(today2.getTime());
long tsTim2 = ts2.getTime();
//System.out.println(tsTim1);
//System.out.println(tsTim2);

System.out.println(tsTim2 - tsTim1);

}

Thread.sleep(10);


}
}

}

[/code]


Hier wird halt die aktuelle Zeit abgefragt die in Long umgewandelt und dann die Differenz ausgegeben.
Ich weiß jetzt nur nicht ob die Ausgabe der Differenz Millisekunden ist oder was?
Gibt es da eine elegantere Methode, wie zum beispiel von Anfang eine Stoppuhr mit Millisekunden laufen zu lassen?

Danke vorab.
 

Michael...

Top Contributor
Nur so als Hinweis:
Code:
System.currentTimeMillis();
liefert die aktuelle Systemzeit in ms.
Und ein SQL Timestamp ist wohl nicht unbedingt das was Du benötigst ;-)
 

Neue Themen


Oben