Page 1 of 1
équivalent de la fonction "couleur de pixel" mais en code
Posted: 29 Dec 2023, 16:35
by Arisoy
Bonjour,
Je recherche l'équivalent de la fonction "couleur de pixel" mais en code.
J'ai pour l'instant brricoler un truc avec un while infini :
Code: Select all
while(Ecran.pixel(X,Y).equals(Couleur)){
Ecran = Image.takeScreenshot();
}
Mais ca me plait pas, le principale problème étant que tant que la couleur n'est pas trouvé le script fige le pc. Je n'ai même plus la possibilité d'arréter le script.
Du coup si quelqu'un peut m'aider la dessus ce serait top
D'avance merci
Re: équivalent de la fonction "couleur de pixel" mais en code
Posted: 29 Dec 2023, 18:05
by francois
trouve = false
while (! trouve) {
if (Ecran.pixel(X,Y).equals(Couleur)){
trouve = true
Ecran = Image.takeScreenshot();
} else {
Execution.pause(200)
}// FIN if
} // FIN While
Non testé
Re: équivalent de la fonction "couleur de pixel" mais en code
Posted: 30 Dec 2023, 10:37
by Arisoy
J'avais pensé ajouter une pause, mais vu le nombre d'endroit ou j'utilise cette fonction et vu que mon script reboucle sur lui même cela va considérablement augmenter son temps d'éxecution.
Je préfèrerais donc éviter de le faire ainsi.
Re: équivalent de la fonction "couleur de pixel" mais en code
Posted: 30 Dec 2023, 17:25
by MDLE46
Bonjour,
Testé et ok.
Cordialement.
MDLE46
//=> A paramétrer
//=================================
var x = 1619 ;
var y = 37 ;
var Couleur = new Color(46, 124, 238, 255);
//================== Fin des paramétrages
var Ecran = new Image();
var Ecran = Image.takeScreenshot();
//=> Retourne : true si vrai, false si faux.
var resultat = Ecran.pixel(x,y).equals(Couleur);
Console.print(resultat) ;
Voir PJ
Re: équivalent de la fonction "couleur de pixel" mais en code
Posted: 30 Dec 2023, 17:51
by MDLE46
ou
//=> A paramétrer
//=================================
var x = 1619 ;
var y = 37 ;
var Couleur = new Color("#2e7cee");
//================== Fin des paramétrages
var Ecran = new Image();
var Ecran = Image.takeScreenshot();
//=> Retourne : true si vrai, false si faux.
if (Ecran.pixel(x,y).equals(Couleur) === false) {Script.nextLine = "bcl" ;}
else {Console.print("ok");} ;
Voir PJ
Re: équivalent de la fonction "couleur de pixel" mais en code
Posted: 30 Dec 2023, 21:35
by MDLE46
en utilisant soit une function, soit while.
Voir PJ.
Re: équivalent de la fonction "couleur de pixel" mais en code
Posted: 31 Dec 2023, 03:18
by Arisoy
Bonjour MDLE46,
Ta solution semble effectivement fonctionner si le test du pixel se fait sans aucun autre code autour. Dans mon cas j'ai du code autour et ne peux donc pas reboucler comme tu le fais.
Voici un exemple du code :
Code: Select all
if(Ecran.pixel(X,Y).equals(Couleur)){
clique.x=X;
clique.y=Y;
Souris.move(clique);
Souris.click();
//Ci dessous
//Boucle qui m'embète car temps que le bouton ne disparait pas le script fige et je n'ai plus la main sur le PC
//On ne peut meme plus arreter le script
while(Ecran.pixel(X,Y).equals(Couleur)){
Ecran = Image.takeScreenshot();
}
}
En gros le script clique sur un bouton et ensuite je vais m'assurer que le bouton disparaisse avant de continuer. Il y'a biensur également du code avant et après le bout que je viens de mettre avec d'autres tests sur d'autres pixels et d'autres couleurs. Certaines parties de code sont desfois executées desfois non en fonction des tests précédants.
Du coup je n'arrive pas a adapter ta solution a mon cas de figure. Ou du moins pas sans avoir à nouveau le problème de script qui ne redonne plus la main.
Je ne peux en effet pas sortir du script actuel pour le réappeler car il se rééxecute depuis le début ce que je ne souhaite pas.
L'attente dot vraiment se faire au niveau du while mais je souhaite qu'a ce moment là le PC ne fige pas pendant que ça reboucle.
Bon après, peut être que ce que je souhaite faire n'est pas possible.
Re: équivalent de la fonction "couleur de pixel" mais en code
Posted: 31 Dec 2023, 05:37
by MDLE46
Bjr Arisoy,
Ce qui bloque, c'est le while qui s'exécute à l'infini.
Donc, dans ton cas, l'idéal, ce n'est pas de faire un script dans une seule action code mais en 3 actions code successifs (while en 2) (sans rappels).
Si ce n'est pas possible, je ne voie pas comment faire.