Page 1 of 1

Images

Unread postPosted: 15 Feb 2009, 15:28
by Kalocagatia
Bonjour,
je suis entrain de faire un programme qui affiche des images, pour ca j utilise:

:Clrdraw
:RclPic monimage,0,0
:pause

Je voulais savoir s il est possible de se deplacer avec les flêches pour parcourir la totalite de mon image (je souhaiterai ne pas la reduire en fait) et si oui comment ?

merci d avance !

Re: Images

Unread postPosted: 15 Feb 2009, 16:09
by critor
Je vois un moyen pas trop compliqué basé sur ton code, à condition que RclPic accepte des positions négatives (hors écran).

* Tu définis 2 variables locales x et y que tu initialises à 0.
* Tu fais une boucle avec:
- l'affichage de l'image: RclPic monimage,x,y
- le test des états du clavier qui va modifier x et y (flèche gauche - x=x-1, flèche droite - x=x+1, flèche haut - y=y-1, flèche bas - y=y+1)


J'ai pas le temps de tester, mais si ça peut t'aider... :):

Re: Images

Unread postPosted: 15 Feb 2009, 16:42
by Kalocagatia
effectivement c 'est pas bete comme idee.
Je viens de le faire mais il y a un probleme de domaine .... on ne peut pas aller vers le bas ni vers la droite, c est a dire lorsque x et y sont negatifs.
RclPic n accepte pas les valeurs negatives.

Re: Images

Unread postPosted: 15 Feb 2009, 17:03
by Kalocagatia
Une solution serait de deplacer l origine sur l image... mais je ne sais pas comment on peut faire ca ni meme si c'est possible.

Re: Images

Unread postPosted: 15 Feb 2009, 21:59
by Kalocagatia
ce que je voulais dire c'est changer le repere lié a l 'image. La on tape les coordonnees du coin haut gauche de l image pour la reperer, ca m'arrangerait que ca soit le coin droit bas.
Ou alors changer de balise... mais la je n en connais pas d autres

Re: Images

Unread postPosted: 15 Feb 2009, 22:23
by Bisam
J'ai peut-être une solution mais elle est sans doute incroyablement gourmande en ressources (mémoire et temps). En tout cas, c'est à essayer.

L'idée est de garder ta grosse image uniquement en mémoire et de la convertir en matrice remplie de 0 et de 1 pour les pixels OFF ou ON. Il faudra créer une fonction qui permette de faire ça.

Ensuite, tu suis la même idée que celle de critor mais au lieu de faire bouger l'image, tu changes l'image à chaque fois. Autrement dit tu crées une matrice à la taille de l'écran dans laquelle tu ne mets que les pixels à afficher. Ensuite tu convertis ta matrice en image (il y a une fonction qui fait cela, mais malheureusement pas avec le type de stockage de données que l'on utilisera... donc il faudra également créer cette fonction) et tu l'affiches.

En plus, je viens de penser qu'avec les fonctions qui existent pour manipuler les matrices, cela ne devrait pas être trop difficile de passer d'une image à l'autre. Il ne faut en tout cas surtout pas réécrire toute la matrice à chaque fois.

En espérant avoir été clair... sinon, si j'ai le temps, je ferai un exemple détaillé.


[Edit] :
Je viens de penser à une autre méthode sans doute plus simple et certainement plus rapide.

Quand tu déplaces ton image, tu enregistres dans une variable temporaire le morceau d'image qui va être conservé (c'est-à-dire tout sauf une ligne ou une colonne). Tu le places alors à la place voulue (c'est-à-dire en décalant d'une ligne ou d'une colonne) puis tu redessines point par point la ligne ou la colonne restante grâce à l'image stockée en mémoire. Il faudra probablement pour cela convertir l'image en matrice de 0 et de 1.

Je pense qu'il est même facile de convertir cela en un programme affichant n'importe quelle image de n'importe quelle taille.

Re: Images

Unread postPosted: 15 Feb 2009, 23:30
by tama
pas terrible la matrice de 0 et de 1... ça risque de prendre beaucoup de place
d'ailleurs j'me pose une question : la TI conserve t-elle la totalité de l'image en mémoire si elle est trop grande ? j'veux dire si jamais on pouvait mettre une image de 640x480 (par exemple) en mémoire, va-t-elle tout garder ? la taille devrait être énorme ...

Re: Images

Unread postPosted: 15 Feb 2009, 23:38
by Bisam
En théorie, une matrice de 0 et de 1 ne prend pas plus de place mémoire qu'une image noir et blanc... puisque c'est juste l'interprétation de la suite de 0 et de 1 qui change.
Après cela dépend de la façon de coder les matrices et les images...