Module turtle python, récupérer la valeur d'un pixel

Fermé
bnoa - Modifié le 23 nov. 2022 à 16:28
mamiemando Messages postés 33372 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 22 novembre 2024 - 23 nov. 2022 à 15:51

Bonjour,

Je commence à coder en python et je cherche a savoir s'il existe une fonction permettant de récupérer la couleur d'un pixel dans l'interface turtle afin de le renvoyer dans une variable.

Par exemple, je code un labyrinthe représenté par un quadrillage de différentes couleurs selon la nature de la case. J'aimerais donc que la tortue puisse différencier les murs des passages grâce à la couleur du pixel sur lequel elle est.

Merci de vos réponses

bnoa


Windows / Chrome 107.0.0.0

A voir également:

2 réponses

yg_be Messages postés 23346 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 24 novembre 2024 Ambassadeur 1 552
23 nov. 2022 à 13:45

bonjour,

si cela n'existe pas, peut-être en vérifiant que la tortue ne se trouve pas trop proche d'aucun mur? 

0
mamiemando Messages postés 33372 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 22 novembre 2024 7 802
Modifié le 23 nov. 2022 à 16:02

Bonjour,

Tu ne peux pas le faire directement.

  • Comme expliqué dans cette discussion turtle.getcanvas() permet de récupérer canvas. Or un canvas est un objet qui stocke un ensemble d'objet (des formes, des images) et n'expose pas de méthodes permettant de récupérer la valeur d'un pixel particulier.
  • Tu peux éventuellement convertir le canvas en fichier eps avec canvas.postscript(file"fichier.eps") (voir ce lien), puis le charger dans PIL, et à partir de là, le convertir dans un format d'image qui permet de récupérer la valeur d'un pixel avec la méthode getpixel.
import turtle

t = turtle.Turtle()
s = turtle.Screen()
s.setup(20, 20)

t.setpos(5, 5)
for _ in range(4):
    t.forward(10)
    t.left(90)

canvas = turtle.getcanvas()
canvas.postscript(file="fichier.eps")

from PIL import Image
image = Image.open("fichier.eps")
(xmax, ymax) = image.size

pixels = [
  image.getpixel((x, y))
  for x in range(xmax)
  for y in range(ymax)
]

from pprint import pprint
pprint(pixels)

Mais bon, ce n'est pas vraiment une bonne manière de procéder, car exporter le canvas est assez "coûteux", car cela force à créer un fichier temporaire à chaque fois.

Selon la manière dont le dessin a été réalisé, tu peux peut-être aussi jouer sur la fonction canvas.find_overlapping() mais encore faut-il que le pixel ait été coloré par un objet (par exemple un rectangle). C'est ce que ce propose ce lien. Pas dit que ça marche dans ton cas.

Bref, tu devrais plutôt regarder du côté de pygame, ce sera bien plus propre. Regarde par exemple ce lien.

Après, si ton dessin turtle est généré à partir d'une structure de donnée qui indique pour chaque case du labyrinthe sa nature, c'est plus là dessus que tu devrais faire tes tests. Voir par exemple cette discussion.

Bonne chance

0