Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.
La shoutbox n'est pas chargée par défaut pour des raisons de performances. Cliquez pour charger.
Menu
Calculatrices
Graph 35 à 100
Graph 25+Pro/25+E/25+E II
Graph 35+USB/75(+E)/85/95 SD
Graph 100(+)
Classpad 300/330(+)
fx-CG 10/20 (Prizm)
Classpad 400(+E)
Graph 90+E
fx-92+ SC
Liens
¤ Transférer un programme sur
sa calculatrice

¤ Vous cherchez une fonction ?
Utilitaires >> Graph 35 à 100 >> Graphisme >> Quadra-compress
Quadra-compress
Version : 1.30 Taille : 2000 octets Ajouté le : 2006-04-21 23:27 Modifié le : 2008-04-22 18:10
Auteur et posteur :
MeithalHors ligneAncien administrateurPoints: 3125 Défis: 7 Message
Planète Casio - Programme Casio de graphisme - Quadra-compress - meithal - Calculatrices
Nombre de visites sur cette page : 12592
Score au progrank : 38
Pas encore de note !
Vous devez être connecté(e) pour noter (inscription).
1761 téléchargements | Soumettre un test


Description :

Télécharger (.cat) (v 1.30): http://grabag.free.fr/fourtout/caltos/quadracomp/Quadracomp%20v1.30.cat

Quadra-comp est une solution de compression/décompression qui décompose n'importe quelle image en rectangles dont les coordonnées sont stoquées dans la matrice P et peut la recomposer en un temps variable qui va de 3 secondes à 2 minutes.

La picture 1 est réquisitionnée pour la procédure.

-------------
Versions
-------------

Version 1.10:
------------------

-Programme de navigation plus complet

-Obligation d'entrer son identifiant (3 lettres) avant chaque compression afin d'identifier l'auteur de la compression et/ou picture

-sauvegarde et chargement assistés.

-Plus aucune picture n'est réquisitionnée et il est possible de compresser l'image courante.

Version 1.30:
---------------

-Il est possible de choisir de nettoyer l'écran avant une décompression.
-Suppression optimisation inutile dans le décompresseur
-Ajout d'un programme de dessin sommaire
-Ajout d'une visionneuse de pictures
-Ajouts d'une image d'exemple à compresser et d'une matrice d'exemple à décompresser.

------------------
Explications
------------------

o) " QDR.CMP1 " correspond à la boucle principale qui va balayer l'intégralité de l'image
(ou de la fenêtre) en testant l'état de chacun des pixels. Si il rencontre un pixel allumé, il
stoquera ses coordonnées puis lancera le programme " QDR.CMP2 "

o) " QDR.CMP2 " contient l'algorythme de compression, c'est à dire le coeur de l'ensemble.
A partir du pixel de base, il essayer de trouver à partir de lui le plus grand rectangle qu'il
soit possible de faire. Une fois ce rectangle trouvé, les coordonées de son point supérieur
gauche et inférieur droit sont stoqués puis le programme " QDR.CMP3 " se lance.

o) " QDR.CMP3 " est un programme dédié au remplissage "intelligent" de la matrice P.
Celle-ci en effet ne pèse que 10 octets au démarrage puis croît de taille au fur et à mesure
que les rectangles de l'image sont stoqués. Si la matrice P est déja occupée, ce programme
se contentera de stoquer les coordonnées à la suite des valeurs déja contenues, sans les
effacer (cependant, il ne conservera que la première colonne en effacant les éventuelles
autres). Si il détecte que la matrice P n'a plus la place suffisante pour contenir la
compression, il sauvegardera ses données dans la matrice Q avant de réinistialiser la
matrice P en y conservant tout de même votre identifiant dans la première case. Il faut noter
que les matrices ne se connecteront pas automatiquement lorsque vous les décompresserez.
Si votre image est morcelée dans plusieurs matrices, il faudra les charger une par une et les
décompresser chacun leur tour.
A noter que si la matrice P se remplit une deuxième fois, la matrice Q sera une nouvelle
fois mise utilisée et les données précédentes seront perdues.
Une fois que les coordonées du rectangles sont stoquées, celles-ci sont passées au
programme " QDR.CMP4 "

o) " QDR.CMP4 " ne fait rien d'autre que d'effacer les pixels du rectangle mis en mémoire.
Si cela n'était pas fait, le rectangle serait stoqué plusieurs fois de suite, car à chaque
balayage de colonne, le programme CMP1 tomberait sur un pixel allumé et relancerait le
processus.

------8<------8<------8<

Précisions sur le programme QDR.CMP2 :

Voici le premier pour voir à quoi correspondent les variables:


QDR.CMP1:
For P->A To R
For Q->B To S
PxlTest B,A
Ans=>Prog "QDR.CMP2"
Next
Next



QDR.CMP2 :
A->C
B->D
Do
C=R=>Goto A
PxlTest D,C+1
Not Ans=>Break
C+1->C
LpWhile 1
Lbl A
C->Z
A->C
B->D
Do
A->C
D=S=>Break
PxlTest D+1,C
Not Ans=>Break
C+1->C
WhileEnd
Lbl B
C<Z=>Break
D+1->D
LpWhile 1
Lbl C
Z->C
Prog "QDR.CMP3"
Return


Premièrement on passe les coordonnées du début à d'autres variables: à savoir C et D.

Ensuite, entrée dans une boucle

Si on trouve que la coordonnées X est au même niveau que Xmax (la variable R), on saute le test pour ne pas produire un Arg Error.

Ensuite, on effectue le test de présence de pixel allumé en X+1 jusqu'à ce qu'on tombe sur un pixel éteint. Cela enclenche un break qui sort de cette boucle.

On donne la dernière valeur du X avant de tmber sur un pixel éteint à la variable Z puis on réinitiallise les variables C et D pour réenclencher une boucle

Pour faire simple, on essaye d'agrandir le rectangle vers le bas au maximum. La croissance du rectangle s'arrête lorsque le pxltest tombe sur un pixel éteint avant la valeur de X stoquée dans Z. On prend alors la valeur Y-1 comme valeur de la hauteur en pixels du rectangle

Une fois le rectangle trouvé, QDR.CMP3 se lance. Il ne fait qu'agrandir la matrice P d'une case puis de rajouter les coordonnées du dernier rectangle trouvé dans la case crée.

Pour la décompression ensuite :


QDR.VIS
CoordOff:GridOff:AxesOff:LabelOff:BG-None:S-WindMan
ClrText:ClrGraph
ViewWindow 1,127,0,1,63,0
S-Gph1 DrawOn,xyLine,List1,List2,1,Dot
S-Gph2 DrawOff
S-Gph3 DrawOff
Cls
Dim Mat P
For 2->Z To List Ans[1]
Mat P[Z,1]
100Frac (Ans/100)->D
Int (Ans/100)
1000Frac (Ans/1000)->C
Int (Ans/1000)
100Frac (Ans/100)->B
Int (Ans/100)->A
2+2*(D-B)->Dim List 1
List 1->List 2
1->L
For B->G To D
A->List 1[L]
64-G->List 2[L]
C=/=A=>Isz L
C->List 1[L]
64-G->List 2[L]
Isz L
Next
DrawStat
Next


Premièrement la définition de la fenêtre graphique.
On voit que ce seront la liste 1 et 2 qui seront utilisées pour le drawstat.

On nettoye l'écran, on vérifie les dimensions de la matrice P. On récupère la valeur Y en utilisant l'argument List Ans[1]

Le For commence à la valeur 2 car la première case de la matrice P contient l'identifiant de la compression, ce qui aboutirait à une erreur grahique.

Chaque case de la matrice P contient les coordonés d'un rectangle.

On peut la découper ainsi:

X1-X1-X1-/-Y1-Y1-/-X2-X2-X2-/-Y2-Y2

L'assemblage de Int( et de Frac( est une technique connue pour repêcher des valeurs dans une suite de chiffres donc je ne m'étendrais pas là dessus.


2+2*(D-B)->Dim List 1


Sert à prédéfinir la taille de la liste qu'il sera nécessaire pour le drawstat. D c'est X2, c'est à dire la valeur absolue (par rapport à l'écran) de la limite inférieure du rectangle. B c'est la limite supérieure. La soustraction de ces deux termes donne la hauteur du rectangle. On multiplie par 2 car chaque ligne du recangle nécessite deux cases dans la liste, et on rajoute 2 car D-B (on aurait pu faire 2*(D-B+1) mais bon...) ne prend pas en compte la dernière ligne.


For B->G To D
A->List 1[L]
64-G->List 2[L]
C=/=A=>Isz L
C->List 1[L]
64-G->List 2[L]
Isz L
Next


On charge deux listes pour lancer un drawstat. La liste 1 pour les coordonnées X des points à tracer et la liste 2 pour les coordonnées Y.

Le balayage de B à D descend le long du rectangle. A chaque nouvelle ligne descendue, on recharge toujours la même variable dans la liste 1 (le bord gauche du rectangle se trouve toujours sur la même colonne). Pour la valeur Y, on utilise la valeur de G qu'on transforme pour respecter le viewwindow.
Ensuite, si C n'est pas différent de A, on n'incrémente pas le pointeur qui sert à remplir les cases pour ne pas utiliser 4 cases de la liste là où il n'en faut (faudrait? A vérifier) que 2.
Ensuite, on charge dans la liste 1 la valeur du bord droit du rectangle et la valeur en Y qui lui correspond.

Le drawstat se lance et les listes sont réinitialisées.


Commentaires :

Pages: Précédente | 1, 2, 3, 4 | Suivante

MeithalHors ligneAncien administrateurPoints: 3125 Défis: 7 Message
Posté le 15-08-2006 à 20:04 | #
Ok. Sinon, tu peux pas essayer de retirer C=/=A=> dans la ligne C=/=A=>Isz L dans QDR.VIS pour voir si c'est pas ca qui buggue avec la 85?
MeithalHors ligneAncien administrateurPoints: 3125 Défis: 7 Message
Posté le 15-08-2006 à 23:12 | #
Il y'a encore ce bug qui m'empèche de mettre un programme à jour ><. J'ai mis le lien vers mon ftp en attendant.
MuelsacoHors ligneFondateurPoints: 9335 Défis: 175 Message
Posté le 16-08-2006 à 11:03 | #
Je vois pas comment c'est possible! Tous les autres jeux se mettent bien à jour. Quand je l'avais fais çà n'avait rien changé?
MeithalHors ligneAncien administrateurPoints: 3125 Défis: 7 Message
Posté le 16-08-2006 à 11:13 | #
Je viens de rééssayer et ca marche C'est peut être parceque le fichier était ouvert en même temps sur mon ordi.
MuelsacoHors ligneFondateurPoints: 9335 Défis: 175 Message
Posté le 16-08-2006 à 11:27 | #
Ah çà me rassure, je savais bien qu'il n'y avait pas de prob de ce côté là
LenainnoirHors ligneAncien administrateurPoints: 5186 Défis: 24 Message
Posté le 16-08-2006 à 16:17 | #
Yop c'est moi !
Je viends de faire 9h de prog non-stop chu en forme !
Bon je raconte ma vie mais c'est pas tout : j'arrive avec une nouvelle version de quadra-compress, totalement débugguée et qui... et qui ... ?

Gère les DIAGONALES !!!
C'est du jamais vu !

Je me suis permis d'ajouter quelques modules à ton programme, Meithal, et il compresse deux fois mieux et surtout, il réaffiche 4 fois plus vite s'il y a beaucoup de points, de diagonales, et de lignes verticales, dont j'ai amélioré l'affichage...

Le bug n'est plus présent (sur 85 je pense que c'est bon avec les autres) et l'interface générale a été améliorée...


Seul petit bémol, il faut à présent 2 matrices par picture, ce qui nous fait (seulement) 12 pictures compressibles au maximum.
Heureusement, j'ai pensé à tout, et on peut stocker dans des listes, ou en collant des matrices car toutes ne font que une case de largeur, et un nombre dérisoire en longueur.
Second petit bémol, le programme est un peu plus lourd (pas beaucoup) en mémoire et en mémoire vive à la compression qui est plus lente...

Mais c'est pas le temps de compression qui compte: c'est la temsp de décompression et surtout la compression !

Désormais, aucun type de picture ne me résiste...
Aucun ? Non ! Une picture résiste encore et toujours à l'envahisseur (euh le programmeur ):
Si votre image a deux diagonales qui partent chacun dans un sens, elles sont comptées comme des pixels seuls, car tout mon algorithme repose sur le post traitement des matrices (j'avais la flemme de programmer un detecteur de diagonales en mode graphique )

Voila si vous avez tout lu, bravo et merci pasque je me suis bien fait mal aux doigts à taper tout ça...


Alors ? Vous le voulez ?

PS : Je viens de m'apercevoir que je peux faire tenir le tout sur une matrice sans aucun problème, alors je reviens tout de suite avec un programme ENCORE mieux !!!
MeithalHors ligneAncien administrateurPoints: 3125 Défis: 7 Message
Posté le 16-08-2006 à 16:45 | #
Si tu as changé la manière d'iterpréter les matrices créés par le quadra-compress d'origine, alors ce n'est plus quadra-compress, mais juste un programme qui utilise le principe de la compression quadratique (qui se base sur les rectangles quoi).
Je te renvoye à la section 4 de la license (que tu devrais lire en entier http://grabag.free.fr/fourtout/caltos/quadracomp/Manuel%20de%20Quadrcompressv1.00.pdf):

4. Les conventions liées à ce format sont:
- La compression et la décompression est réalisée dans et depuis la matrice P.
- Le compresseur, le visionneur et l'initiateur doivent !=tre indépendants du navigateur et
d'autres éléments éléments empêchants la réutilisation transparente des trois programmes
cités précédemment dans d'autres programmes externes.
- La matrice produite par un système de compression d'une version plus avancée doit rester
interprétable par le visionneur de la présente version.
- La première case de la matrice P contient dans sa partie fractionnée les 3 getkey
permettant d'identifier l'auteur de l'image et/ou de la compression.
- Les 4 variables P ,Q ,R ,S servent respectivement à désigner la limite de gauche,
supérieure, de droite et inférieure de la fenêtre de compression et sont les seuls paramètres
initiaux utilisés par le compresseur.
- Le visionneur ne dépend d'aucun paramètre initial.


Si tu n'as pas respecté ces conventions, alors le programme ne peut pas s'appeller quadra-compress, mais tu peux le modifier pour que ca soit le cas ou bien le poster sous un autre nom en précisant qu'il se base sur l'algo de quadra-compress

A combien arrives-tu à compresser l'image de cloud avec ton algo?
LenainnoirHors ligneAncien administrateurPoints: 5186 Défis: 24 Message
Posté le 16-08-2006 à 17:36 | #
Je respecte ces conventions, mais je fais des choses qui ne sont pas précisées :
- seule une partie de la décompression est faite par la Mat P, et ce pour la compression aussi.

Je n'ai modifié aucun des programmes .CMPx, je leur ai simplement ajouté des modules .CMP5 et 6, qui poussent plus la compression sur certains types d'image...


Ce que je voulais c'était t'aider à résoudre ton bug et faire profiter aux utilisateurs d'un programme plus puissant, tout en gardant ton intuitivité et le coeur de ton algo.

Je voulais simplement partager une ressource :
ca ne sert à rien de proposer 50 programmes de compression si un seul peut être meilleur que tous les autres, en l'occurence le mien pour l'instant.

Maintenant, à toi de voir si tu veux rester l'auteur du programme de compression le plus puissant et surtout le plus rapide existant pour casio...
Je te demande juste une place dans tes crédits...


Pour terminer :
je te remercie pour hier soir, de m'avoir envoyé rapidement le programme, c'est gentil.

Pour Cloud, cette image contient peu de lignes verticales, de points et de diagonales, donc ma compression restera la même que la tienne et l'affichage sensiblement aussi rapide...
Compression de Cloud : En cours...

Mais sur d'autres types d'images, je te défie !


Donc je le poste comme un prog à moi ou j'upload le tien ?
MeithalHors ligneAncien administrateurPoints: 3125 Défis: 7 Message
Posté le 16-08-2006 à 18:50 | #
Pour le savoir, il faudrait que tu me passes le décompresseur et que je voie si il restitue fidèlement une image compressée avec une version antérieure du programme. Si ce n'est pas le cas, alors il s'agit d'un nouveau format, disons le .qdr2
LenainnoirHors ligneAncien administrateurPoints: 5186 Défis: 24 Message
Posté le 16-08-2006 à 18:55 | #
Dans ce cas, non.
J'ai modifié le décompresseur pour qu'il soit plus rapide à la décompression.

Je posterai donc mon propre programme demain, en précisant que la structure interne est de toi.
Je vais reprogrammer tout le tou, pour en faire un programme plus intuitif, rapide avec plus de posssiblités, comme un éditeur d'images, un releveur de coordonnées et otu le reste.
Merci pour le système des carrés, j'y aurai pas pensé tout seul...

Pages: Précédente | 1, 2, 3, 4 | Suivante

Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 105 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd