Page 1 of 2
Manque un pixel en affichant un rectangle
Posted:
14 Nov 2018, 14:36
by ptijoz
Bonjour
je me suis amusé à faire une fonction pour dessiner un rectangle avec la version 18.0 beta
voici le code :
- Code: Select all
from kandinsky import *
#c couleur
#e epaisseur
#h hauteur
#w largeur
def rectangle(x,y,w,h,c,e):
for i in range(e):
draw_line(x,y+i,x+w,y+i,c)
draw_line(x-i+w,y,x-i+w,y+h,c)
draw_line(x+w,y-i+h,x,y-i+h,c)
draw_line(x+i,y+h,x+i,y,c)
appel de la fonction :
>>> c=color(255,0,0)
>>> rectangle(10,10,50,150,100,c,4)
ce qui donne un rectangle d'épaisseur de bord de 4 pixels : et j'ai l'impression qu
'il manquerait un pixel en bas à droite... Une idée ?
Merci de vos conseils
Re: Manque un pixel en affichant un rectangle
Posted:
14 Nov 2018, 16:50
by critor
Cela le fait aussi avec une épaisseur de 1.
Or tes coordonnées me semblent bonnes dans ce cas...
Re: Manque un pixel en affichant un rectangle
Posted:
14 Nov 2018, 16:54
by ptijoz
Merci d'avoir regardé
Un bug dans la fonction draw_line ?
Re: Manque un pixel en affichant un rectangle
Posted:
14 Nov 2018, 17:42
by jean-baptiste boric
Cette fonction est implémentée par du code natif du firmware qui existait déjà et que je n'ai fait que l'exposer dans Python. S'il y a un bug dedans, c'est a priori probablement du côté de KDContext::drawLine(). Je regarderai ça à l'occasion.
Re: Manque un pixel en affichant un rectangle
Posted:
14 Nov 2018, 19:59
by ptijoz
jean-baptiste boric wrote:Cette fonction est implémentée par du code natif du firmware qui existait déjà et que je n'ai fait que l'exposer dans Python. S'il y a un bug dedans, c'est a priori probablement du côté de KDContext::drawLine(). Je regarderai ça à l'occasion.
Merci d'avance
Re: Manque un pixel en affichant un rectangle
Posted:
14 Nov 2018, 20:23
by Extra44
j'ai recopié ton code dans du python et adapté (avec du tkinter) sur mon PC.
J'ai remarqué la ligne ou il y a un i seul en trop, et aussi que quand on prend w et h en tailles, alors les pixels doivent aller de x a x+w-1, et de y a y+h-1, il manque les -1, sinon le rectangle est plus grand de 1 pixel en x et en y.
J'étais partit la dessus, mais dans mon python sur PC, le cadre etait bien plein.... donc meme si ton rectangle est plus gros qu'il ne le faut, le bug du pixel manquant ne vient effectivement (à priori ) pas de ton code.
Re: Manque un pixel en affichant un rectangle
Posted:
14 Nov 2018, 21:08
by ptijoz
Bonjour
Merci pour tes tests et tes corrections de code
Au départ j'avais codé en "dur" car mon souci était de reproduire ce "bug"
Re: Manque un pixel en affichant un rectangle
Posted:
15 Nov 2018, 15:57
by ptijoz
J'ai refait le code suite réponse de @Extra44
si je mets f=0 le rectangle est trop grand de 1 pixel
et si je mets f=1 le rectangle semble être de la bonne taille mais il manque toujours un pixel
Vous confirmez ?- Code: Select all
from kandinsky import *
def rectangle(x,y,w,h,c,e):
f=1
for i in range(e):
draw_line(x,y+i,x+w-f,y+i,c)
draw_line(x-i+w-f,y,x-i+w-f,y+h-f,c)
draw_line(x+w-f,y-i+h-f,x,y-i+h-f,c)
draw_line(x+i,y+h-f,x+i,y,c)
Re: Manque un pixel en affichant un rectangle
Posted:
15 Nov 2018, 20:47
by Extra44
Voici le fichier demandé si cela peut servir . NB : c'est sur python sur PC windows, avec l'interface tkinter : ton algo fonctionne sur PC !
J'ai du adapter le code pour faire apparaitre la couleur (pasde choix possible, pour l'instant c'est du rouge),ce qui nous/toi interesse, c'est la partie def rect0(...) .
Comme dit précedemment, je ne peux pour ma part confirmer ton bug, je ne peux que juste confirmer que ton code marche bien (semble t il) sur PC/WIndows 10/Python 3.6 avec tkinter .
Je n'en suis qu'a la version 1.6 sur numworks ... donc je ne peux tester ton bout de code.
Re: Manque un pixel en affichant un rectangle
Posted:
15 Nov 2018, 21:30
by ptijoz
merci pour le code que je viens de le tester sous Linux avec Python 3 .6 et ça fonctionne bien et ce sans manque de pixel.
Je pense que Jean-Baptise Boric saura dire dire si c'est un bug dans le firmware
Bien à toi et encore merci.