Grouper des pixels
Bonjour,
Je cherche à programmer un petit jeu en pixel 160*144 avec
Mais le processus et très long pour rafraîchir l'écran. J'imagine que à chaque fois que demande à l'ordi :
Est-possible de les grouper afin qu'ils ne forment qu'une seul entité ? Ou alors d'utiliser une autre technique pour accélérer le calcul ?
Merci.
Je cherche à programmer un petit jeu en pixel 160*144 avec
tkinter. Je groupe donc mes pixels de l'écran en carré de 6*6.
c=[] #liste de tous les "groupe de pixels" for y in range(144): c.append([]) for x in range(160): c[y].append(canv.create_rectangle( x * 6 + 1, y * 6 + 1, x * 6 + 7, y * 6 + 7, outline="" ))
Mais le processus et très long pour rafraîchir l'écran. J'imagine que à chaque fois que demande à l'ordi :
canv.itemconfig(c[y][x],fill="black")par exemple, il recalcule tous les pixels qu'il doit modifier.
Est-possible de les grouper afin qu'ils ne forment qu'une seul entité ? Ou alors d'utiliser une autre technique pour accélérer le calcul ?
Merci.
A voir également:
- Combien y a-t-il de bateaux dans la zone de 1000 pixels de large et 500 pixels de haut à partir du coin supérieur gauche de cette image ?
- Combien y a-t-il de bateaux dans la zone de 475 pixels de large et 1000 pixels de haut à partir du coin supérieur gauche de cette image ? - Guide
- Windows 11 barre des taches a gauche - Guide
- Alternative zone telechargement - Accueil - Outils
- Frédéric cherche à faire le buzz sur les réseaux sociaux. il a ajouté une image de manchots sur une image de plage. retrouvez l'image originale de la plage. que cachent les manchots ? - Forum Graphisme
- Supprimez les composantes rouge et verte de cette image. - Forum Word
4 réponses
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
bonjour,
difficile de deviner ce que tu essaies de faire à partir d'un extrait de ton programme.
peux-tu partager un programme que nous pouvons tester?
difficile de deviner ce que tu essaies de faire à partir d'un extrait de ton programme.
peux-tu partager un programme que nous pouvons tester?
Oui bien sûr :
from tkinter import *
from time import*
from math import*
from random import*
def presse(aaa) :
global touche
if not aaa.keysym in touche : touche.append(aaa.keysym)
def depresse(aaa) :
global touche
if aaa.keysym in touche : touche.remove(aaa.keysym)
def init() :
global c, touche, sol, map, px,py
px,py=0,0
lx,ly=20,18
touche=[]
sol=[]
a=1 #normalement je récupère un fichier mais pour ne pas importer, j'ai recrée ces fichier en minimaliste : ce ne sera que des traits
if a==0 :
q=open("data/sol.txt","r")
for i in range(2) : sol.append(q.readline())
map=open("data/map.txt","r").readline()
else :
for i in range(2) :
sol.append("00000000111111110000000011111111000000001111111100000000111111110000000011111111")
map=""
for i in range(20) :
for z in range(18) : map=map+"0"
c=[]
for y in range(144) :
c.append([])
for x in range(160) : c[y].append(canv.create_rectangle(x*6+1,y*6+1,x*6+7,y*6+7,outline=""))
refresh()
boucle()
def boucle() :
global px, py
if "Up" in touche :
py=py-1
refresh()
if "Down" in touche :
py=py+1
refresh()
canv.after(10,boucle)
def refresh() :
for y in range(144) :
for x in range(160) :
canv.itemconfig(c[y][x],fill=["black","white"][eval(sol[eval(map[(x+px)//8+(y+py)//8*8])][(x+px)%8+(y+py)%8*8])])
fen=Tk()
fen.geometry("961x865")
canv=Canvas(fen)
canv.place(x=0,y=0,height=865,width=961)
fen.bind("<Key>",presse)
fen.bind("<KeyRelease>",depresse)
init()
fen.mainloop()
Peux-tu préciser le langage quand tu utilises les balises de code?
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
Quand je teste ton programme, un refresh() prend 350 msec, dont 250 pour faire tous les calculs.
Ensuite l'affichage va se faire.
Tu pourrais donc gagner du temps en optimisant tes calculs.
Je n'ai pas essayé de comprendre ce que tu calculais.
eval() n'est peut-être pas nécessaire.
je vois que tu recalcules dans la boucle des x des formules que tu pourrais calculer dans la boucle des y.
Tous les petits rectangles sont ils modifiés à chaque fois? Sinon, il n'est peut-être pas nécessaire d'appeler itemconfig() pour chacun des rectangles.
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
Quand je teste ton programme, un refresh() prend 350 msec, dont 250 pour faire tous les calculs.
Ensuite l'affichage va se faire.
Tu pourrais donc gagner du temps en optimisant tes calculs.
Je n'ai pas essayé de comprendre ce que tu calculais.
eval() n'est peut-être pas nécessaire.
je vois que tu recalcules dans la boucle des x des formules que tu pourrais calculer dans la boucle des y.
Tous les petits rectangles sont ils modifiés à chaque fois? Sinon, il n'est peut-être pas nécessaire d'appeler itemconfig() pour chacun des rectangles.
Bonjour,
Comme l'explique cette discussion, tu peux utiliser la classe
Bonne chance
Comme l'explique cette discussion, tu peux utiliser la classe
PhotoImagequi te permettra de travailler à l'échelle du pixel "en live", ce qui t'évite d'avoir à tout rafraîchir.
Bonne chance
OK je vais enlever tout les calculs de quel pixels où que le programme répète à chaque fois. Au début du programme, dans init(), il va créer une matrice. Mais dois-je la faire sous forme d'une énorme liste ou directement une image où je chercherai les infos avec getpixel ? Si c'est en une image, pourriez-vous me dire s'il existe un format noir et blanc où un pixel=un bit ? Pour l'instant j'ai trouvé seulement BMP mais ce ne marche pas avce mon python.
Merci
Merci
Mais dois-je la faire sous forme d'une énorme liste ou directement une image où je chercherai les infos avec getpixel ?
Si tu prends le temps de regarder le lien que je t'ai donné, tu verras que tu peux interagir directement avec l'objet
Si c'est en une image, pourriez-vous me dire s'il existe un format noir et blanc où un pixel=un bit
Ce sera plus qu'un bit dans les fait. Rien qu'en bitmap, chaque pixel coûte 3 ou 4 octets. Mais quoi qu'il en soit, peu importe la manière dont le format encode l'image, toi à ton niveau tu ne fais qu'interagir avec un objet
Pour l'instant j'ai trouvé seulement BMP mais ce ne marche pas avce mon python.
Comme le souligne yg_be, "ça ne marche pas" est une information trop vague sur un forum. Sans code, sans message d'erreur, impossible de t'en dire plus. Mais quoi qu'il en soit, tu n'as pas à te poser des questions existentielles sur comment fonctionne un format d'image : il y a généralement un objet (au hasard...
Bonne chance
Si tu prends le temps de regarder le lien que je t'ai donné, tu verras que tu peux interagir directement avec l'objet
PhotoImageet que tu n'as pas besoin de manipuler un autre objet.
Si c'est en une image, pourriez-vous me dire s'il existe un format noir et blanc où un pixel=un bit
Ce sera plus qu'un bit dans les fait. Rien qu'en bitmap, chaque pixel coûte 3 ou 4 octets. Mais quoi qu'il en soit, peu importe la manière dont le format encode l'image, toi à ton niveau tu ne fais qu'interagir avec un objet
PhotoImage.
Pour l'instant j'ai trouvé seulement BMP mais ce ne marche pas avce mon python.
Comme le souligne yg_be, "ça ne marche pas" est une information trop vague sur un forum. Sans code, sans message d'erreur, impossible de t'en dire plus. Mais quoi qu'il en soit, tu n'as pas à te poser des questions existentielles sur comment fonctionne un format d'image : il y a généralement un objet (au hasard...
PhotoImage) qui s'occupe de tout gérer pour toi.
Bonne chance