Liste tuples et images | |
Philippe | 6-Apr-2010/11:14:51+2:00 |
Bonjour, J'ai une liste qui se présente ainsi : tableau-data: [ A [0.0.0 120.134.56 220.135.34 0.0.0 0.0.0 145.220.156 etc..] B [0.201.30 222.32.0 198.135.34 254.254.0 20.167.0 35.208.196 etc..] etc.. ] soit un tableau de [ variable + bloc de tuples associé ]. Le bloc de tuples associé à une variable peut être vide ou très grand : > 1500 tuples. Comme je prépare une image pour chaque tuple, lorsque je fais la transformation du layout composite final en image, j'ai une erreur mémoire Rebol : le code produit (out) est en effet très important (centaine de mégas). Comment puis-je éviter cela ? ci-dessous le code : out: [ backeffect [gradient 0x1 white silver] across space 1x1 ] ; ------ prepapre statement --- foreach [label-hour tab-colors] tableau-data [ blk-img: clear [] if (not empty? tab-colors) [ foreach colr tab-colors [ append blk-img compose/deep [image (make image! compose/deep [10x20 (colr) ])] ] ; end foreach ] append out compose/deep [ text (label-hour) pad 10x0 (blk-img) return ] ] code: compose/deep [layout [(out)] ] code: do code ; ---- PB de memoire ici --------- res-img: to-image code Merci.. ===Philippe | |
DocKimbel | 6-Apr-2010/17:44:13+2:00 |
Salut, Je ne suis pas sûr de bien comprendre ce que tu veux faire, mais si tu produit 1500 images par "entrée" dans tableau-data, ce n'est pas étonnant que tu exploses la mémoire. Il me semble que l'utilisation de LAYOUT n'est pas adaptée dans ce cas, il vaudrait mieux construire un bloc de commandes DRAW pour effectuer les tracés de rectangles colorés dans une face unique de la taille de ta fenêtre. -- Nenad | |
guest2 | 6-Apr-2010/18:39:46+2:00 |
J'éviterais même la construction d'un énorme bloc draw. En appelant la fonction draw (à distinguer de la commande draw) sur la même image à chaque itération (pour chaque tuple). | |
Didec | 8-Apr-2010/10:32:35+2:00 |
Une proposition :Rebol [] pixel-size: 10x20 ; taille d'un rectangle de couleur pixel-dir: 1x0 ; pour mettre les rectangles cote à cote tableau-data: [ A [0.0.0 120.134.56 220.135.34 0.0.0 0.0.0 145.220.156] B [0.201.30 222.32.0 198.135.34 254.254.0 20.167.0 35.208.196] C [120.134.56 220.135.34 0.0.0 0.0.0 0.0.0 145.220.156 50.60.85 145.62.250 32.96.23] ] ; ------ prepapre statement --- out: [ backeffect [gradient 0x1 white silver] across space 10x1 ] foreach [label-hour tab-colors] tableau-data [ ; Il y a des couleurs if not empty? tab-colors [ ; on créé une image assez grande pour pouvoir y dessiner un rectangle de chaque couleur img: make image! pixel-size * as-pair length? tab-colors 1 ; position où on dessine dans l'image pos: 0x0 ; pour chaque couleur foreach colr tab-colors [ ; ajout d'un rectangle de la couleur en question dans l'image complête img: draw img compose [pen (colr) fill-pen (colr) box (pos) (pos + pixel-size)] ; position du rectangle suivant pos: pos + pixel-size * pixel-dir ] ] ; ajout au layout du libellé et de l'image créé sur une même ligne append out compose/deep [ text (to-string label-hour) 20 image (img) return ] ] ; pour voir le résultat en direct ;view layout out ; création de l'image finale res-img: to-image layout out ; pour voir l'image finale view layout [origin 0 image res-img] | |
Philippe | 10-Apr-2010/11:03:14+2:00 |
Salut, Je vais regarder tout çà tranquille. Désolé un deuil dans ma famille m'a éloigné du forum ces derniers jours. à + ===Philippe | |
Login required to Post. |