n0n4m3
11-07-2009, 18:47
allora, sto creando un programma che, da come si puo intuire dal titolo, faccia delle cose al posto mio :P
il problema è il seguente: ho bisogno che questo vada in una certa posizione dello schermo e mi prenda il colore del pixel, poi passi al pixel alla sua destra e faccia la stessa cosa. tutto funziona se fatto girare su eclipse o con una finestra/immagine davanti ad eclipse (mi da giustamente una serie di pixel bianchi e ogni tanto uno nero, dovuto alle scritte). il problema arriva quando voglio fargli fare questo aprendo una finestra, sulla quale poi deve fare cio' che gli dico. allora, ecco il codice:
public static void searchForMovement(Robot myRobot)
{
Color[] firstShot = new Color[215];
Color[] secondShot = new Color[215];
for(int i = 0; i < 214; i++)
{
myRobot.mouseMove((106 + i), 504);
firstShot[i] = myRobot.getPixelColor((106 + i), 504);
}
for(int i = 0; i < 214; i++)
{
System.out.println(firstShot[i].toString());
}
myRobot.delay(1500 + (int)(Math.random() * 1000));
for(int i = 0; i < 214; i++)
{
myRobot.mouseMove((106 + i), 504);
secondShot[i] = myRobot.getPixelColor((106 + i), 504);
}
}
l'output, che ottengo dal secondo for, aprendo la finestra desiderata (gioco) dopo aver fatto partire il programma è il seguente:
java.awt.Color[r=0,g=0,b=0]
java.awt.Color[r=0,g=0,b=0]
java.awt.Color[r=0,g=0,b=0]
java.awt.Color[r=0,g=0,b=0]
java.awt.Color[r=0,g=0,b=0]
java.awt.Color[r=0,g=0,b=0]
java.awt.Color[r=0,g=0,b=0]
java.awt.Color[r=0,g=0,b=0]
java.awt.Color[r=0,g=0,b=0]
java.awt.Color[r=0,g=0,b=0]
java.awt.Color[r=0,g=0,b=0]
java.awt.Color[r=0,g=0,b=0]
java.awt.Color[r=0,g=0,b=0]
java.awt.Color[r=0,g=0,b=0]
[...]
java.awt.Color[r=0,g=0,b=0]
java.awt.Color[r=0,g=0,b=0]
se ora voglio fargli fare la stessa cosa funziona sia se nn sovrappongo niente ad eclipse, sia se sovrappongo un'immagine/firefox/else. ecco il risultato:
java.awt.Color[r=221,g=224,b=231]
java.awt.Color[r=221,g=224,b=231]
java.awt.Color[r=221,g=224,b=231]
java.awt.Color[r=221,g=224,b=231]
java.awt.Color[r=221,g=224,b=231]
java.awt.Color[r=221,g=224,b=231]
java.awt.Color[r=221,g=224,b=231]
[...]
java.awt.Color[r=221,g=224,b=231]
java.awt.Color[r=221,g=224,b=231]
il problema è ke anche se ho messo (obsoletamente) il myRobot.MouseMove(x, y) nn vedo il mouse muoversi se ho il gioco aperto, mentre se è chiuso il mouse si sposta linearmente...qualche idea?
PS: ho provato a passare dal createScreenCapture per fare uno screenshot, ma poi ho solo il metodo getRGB per poter ottenere il colore che tuttavia per due pixel rossi ottengo un int differente -.- (forse l'int che ottengo da getRGB contiene informazioni anche a proposito della sua posizione)...qualche idea per poter ovviare a questo?
il problema è il seguente: ho bisogno che questo vada in una certa posizione dello schermo e mi prenda il colore del pixel, poi passi al pixel alla sua destra e faccia la stessa cosa. tutto funziona se fatto girare su eclipse o con una finestra/immagine davanti ad eclipse (mi da giustamente una serie di pixel bianchi e ogni tanto uno nero, dovuto alle scritte). il problema arriva quando voglio fargli fare questo aprendo una finestra, sulla quale poi deve fare cio' che gli dico. allora, ecco il codice:
public static void searchForMovement(Robot myRobot)
{
Color[] firstShot = new Color[215];
Color[] secondShot = new Color[215];
for(int i = 0; i < 214; i++)
{
myRobot.mouseMove((106 + i), 504);
firstShot[i] = myRobot.getPixelColor((106 + i), 504);
}
for(int i = 0; i < 214; i++)
{
System.out.println(firstShot[i].toString());
}
myRobot.delay(1500 + (int)(Math.random() * 1000));
for(int i = 0; i < 214; i++)
{
myRobot.mouseMove((106 + i), 504);
secondShot[i] = myRobot.getPixelColor((106 + i), 504);
}
}
l'output, che ottengo dal secondo for, aprendo la finestra desiderata (gioco) dopo aver fatto partire il programma è il seguente:
java.awt.Color[r=0,g=0,b=0]
java.awt.Color[r=0,g=0,b=0]
java.awt.Color[r=0,g=0,b=0]
java.awt.Color[r=0,g=0,b=0]
java.awt.Color[r=0,g=0,b=0]
java.awt.Color[r=0,g=0,b=0]
java.awt.Color[r=0,g=0,b=0]
java.awt.Color[r=0,g=0,b=0]
java.awt.Color[r=0,g=0,b=0]
java.awt.Color[r=0,g=0,b=0]
java.awt.Color[r=0,g=0,b=0]
java.awt.Color[r=0,g=0,b=0]
java.awt.Color[r=0,g=0,b=0]
java.awt.Color[r=0,g=0,b=0]
[...]
java.awt.Color[r=0,g=0,b=0]
java.awt.Color[r=0,g=0,b=0]
se ora voglio fargli fare la stessa cosa funziona sia se nn sovrappongo niente ad eclipse, sia se sovrappongo un'immagine/firefox/else. ecco il risultato:
java.awt.Color[r=221,g=224,b=231]
java.awt.Color[r=221,g=224,b=231]
java.awt.Color[r=221,g=224,b=231]
java.awt.Color[r=221,g=224,b=231]
java.awt.Color[r=221,g=224,b=231]
java.awt.Color[r=221,g=224,b=231]
java.awt.Color[r=221,g=224,b=231]
[...]
java.awt.Color[r=221,g=224,b=231]
java.awt.Color[r=221,g=224,b=231]
il problema è ke anche se ho messo (obsoletamente) il myRobot.MouseMove(x, y) nn vedo il mouse muoversi se ho il gioco aperto, mentre se è chiuso il mouse si sposta linearmente...qualche idea?
PS: ho provato a passare dal createScreenCapture per fare uno screenshot, ma poi ho solo il metodo getRGB per poter ottenere il colore che tuttavia per due pixel rossi ottengo un int differente -.- (forse l'int che ottengo da getRGB contiene informazioni anche a proposito della sua posizione)...qualche idea per poter ovviare a questo?