Page 1 of 3

Format ti_picture

Unread postPosted: 17 Sep 2020, 19:35
by Maxam
Hello,

Je cherche à comprendre le format des images de la bib ti_picture, mais je n'y comprend rien, ou alors ça fait trop longtemps que je n'ai pas jouer avec des pixels :)

Voila un petit bout de code pour tester, c'est censé afficher deux lignes verticales, je vous laisse admirer par vous même

Code: Select all
def setPixel(img,x,y,color):
    pixel=(y*318)+(x*3)
    img[pixel]=color[2]
    img[pixel+1]=color[1]
    img[pixel+2]=color[0]
def test():
  clear()
  img=newImage(318,212,(0,0,0))
  color=(255,255,255)
  for y in range(0,212):
    setPixel(img,6,y,color)
    setPixel(img,8,y,color)
  showImage(img,318,212,0,0)

Re: Format ti_picture

Unread postPosted: 17 Sep 2020, 20:02
by critor
Avec un newImage(318, 212, ...) on obtient une liste de 202248 éléments, soit 318*212*3.
Donc le format semblerait évident, du RGB-888.

Après je constate comme toi, impossible d'obtenir un affichage correct avec showImage(...). Sur le logiciel ça ne m'affiche même rien du tout.

Peut-être pour ça aussi que le module ti_picture n'est pas (encore ?...) au menu, si il ne marche pas...

Re: Format ti_picture

Unread postPosted: 17 Sep 2020, 20:08
by Maxam
critor wrote:Avec un newImage(318, 212, ...) on obtient une liste de 202248 éléments, soit 318*212*3.
Donc le format semblerait évident, du RGB-888.

Oui, j'en ai tenu compte dans mon setPixel et d'après mes essais c'est bien du 888.

critor wrote:Après je constate comme toi, impossible d'obtenir un affichage correct avec showImage(...). Sur le logiciel ça ne m'affiche même rien du tout.
Peut-être pour ça aussi que le module ti_picture n'est pas (encore ?...) au menu, si il ne marche pas...


Il faut faire un clear() (de ti_draw) avant sinon la machine ne passe pas en mode graphique. Ensuite showImage affiche (dans le logiciel) mais c'est n'importe quoi.

Re: Format ti_picture

Unread postPosted: 17 Sep 2020, 20:10
by Ti64CLi++
Le module ti_picture marche de la même manière que ti_image non ?

Re: Format ti_picture

Unread postPosted: 17 Sep 2020, 20:18
by critor
@Ti64CLi++ Absolument pas.

Maxam wrote:Il faut faire un clear() (de ti_draw) avant sinon la machine ne passe pas en mode graphique. Ensuite showImage affiche (dans le logiciel) mais c'est n'importe quoi.

Merci pour la précision. Alors dans ce cas ça me semble marcher parfaitement : :)
Image

C'est simplement ta fonction setPixel() qui est à corriger, 1ère ligne :
Code: Select all
def setPixel(img,x,y,color):
    pixel=(y*318+x)*3
    img[pixel]=color[2]
    img[pixel+1]=color[1]
    img[pixel+2]=color[0]

Re: Format ti_picture

Unread postPosted: 17 Sep 2020, 20:23
by Ti64CLi++
La fonction showImage marche comme tel : showImage(var_img, w, h, x, y)

Ici, les paramètres w et h doivent respectivement valoir la largeur et la hauteur de votre image, donc si vous créez une image de dimension 10x10, il faudra mettre 10, 10.
Ensuite, les paramètres x et y sont bien évidemment la position.

Voilà un code qui marche par exemple :
Code: Select all
from ti_draw import clear
from ti_picture import newImage, showImage

clear()

img = newImage(50, 50, (255, 0, 0))
showImage(img, 50, 50, 0, 0)

for i in range(len(img) / 3):
  img[3 * i] = 0
  img[3 * i + 2] = 255

showImage(img, 50, 50, 70, 80)


Après rien n'empêche de mettre des valeurs inférieures à la taille pour w et h, l'image sera juste rognée ;)

Re: Format ti_picture

Unread postPosted: 17 Sep 2020, 20:23
by Maxam
critor wrote:@Ti64CLi++ Absolument pas.

C'est simplement ta fonction setPixel() qui est à corriger, 1ère ligne :


Oui mais non, les lignes devraient être blanches :)

Re: Format ti_picture

Unread postPosted: 17 Sep 2020, 20:25
by critor
@Ti64Cli++
Je ne comprends pas où tu veux en venir. Tu décris exactement ce qui est déjà dans le code initial depuis le début...

@Maxam
J'ai juste testé avec un exemple à moi, et ça donne bien exactement ce que j'ai codé.
Code: Select all
def test():
  clear()
  img=newImage(318,212,(0,0,0))
  for y in range(0,212):
    setPixel(img,6,y,(255,0,0))
    setPixel(img,8,y,(0,255,0))
    setPixel(img,10,y,(0,0,255))
  showImage(img,318,212,0,0)
Retente avec la correction que je t'ai donnée et ça marchera. :)

Re: Format ti_picture

Unread postPosted: 17 Sep 2020, 20:28
by Maxam
Ti64CLi++ wrote:La fonction showImage marche comme tel : showImage(var_img, w, h, x, y)


Oui, c'est bien que ce j'utilise:

Code: Select all
img=newImage(318,212,(0,0,0))
showImage(img,318,212,0,0)

Re: Format ti_picture

Unread postPosted: 17 Sep 2020, 20:31
by Ti64CLi++
Désolé, j'avais mal compris le problème :?

Comme dit critor, pour pallier à ton problème, il suffit de remplacer pixel = (y*318)+(x*3) par pixel = (y*318+x)*3 ;)