Liste tuples et images
Philippe6-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
DocKimbel6-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
guest26-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).
Didec8-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]
Philippe10-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.


Powered by RebelBB and REBOL 2.7.8.4.2