Pages: 1
- Sujet précédent - ecriture sous IDL d'un entier en binaire sur plus de 8 bits - Sujet suivant
#1 Fri 21 March 2008 03:37
- Arthy
- Participant actif
- Date d'inscription: 27 Mar 2007
- Messages: 61
ecriture sous IDL d'un entier en binaire sur plus de 8 bits
Bonjour,
Je souhaiterai créer une image binaire à l'aide du logiciel IDL. Certaines valeurs étant supérieures 1023, je suis donc contraint de devoir le faire sur 32 bits. Je n'y suis malheureusement parvenu.
Voici ce que j'ai essayé de faire si je veux écrire 600 dans nom_fich
Code:
openw, 10, 'nom_fich' write, 10, 600 close,10
Seulement la valeur qui est enregistrée correspond plutot à 600 modulo 256 comme mentionné dans l'aide de la routine writeu. Certes avec l'option transfer_count, (ici transfert_count=2) il est possible de retrouver la valeur initiale, mais le problème reste posé car moi je désire obtenir une image qui puisse être importée et utilséé à l'aide de n'importe quel logiciel de traitement d'images. D'ou le choix du format binaire
Merci
Hors ligne
#2 Fri 21 March 2008 09:48
- Cla1r3
- Juste Inscrit !
- Date d'inscription: 7 Sep 2007
- Messages: 7
Re: ecriture sous IDL d'un entier en binaire sur plus de 8 bits
Bonjour,
Si tu veux écrire en binaire avec IDL, il faut utiliser WRITEU (le U etant pour "Unformatted data").
Ensuite si tu écrits ton nombre 600 tel quel (ton instruction: writeu, 10, 600), IDL le prendra comme un entier sur 2 octets (c'est le typage dynamique de IDL, on aime ou pas...). 2 octets, c'est largement suffisant pour stocker 1024, donc le type INT d'IDL est suffisant.
Enfin, si tu préfères controler le type de données que tu écrits dans ton fichier, je te conseille de surcharger le typage dynamique d'IDL en faisant:
OPENW, 10, 'nom_fich'
WRITEU, 10, 600S
CLOSE, 10
avec ce 'S' accolé à ton nombre, tu es sur qu'il te le stockera sur 16-bit. Il existe autant de suffixes que de types de données IDL (cf aide en ligne).
Pour vérifier que tout marche bien:
var = 0S
OPENR, lun, 'nom_fich', /GET_LUN
READU, lun, var
CLOSE, lun
HELP, var
et on retrouve bien la valeur 600 en INT
Hors ligne
#3 Fri 21 March 2008 12:19
- Arthy
- Participant actif
- Date d'inscription: 27 Mar 2007
- Messages: 61
Re: ecriture sous IDL d'un entier en binaire sur plus de 8 bits
Merci
J'ai résolu mon problème. Peux-tu m'en dire plus sur ce format d'écriture?
Bonne fête de Pacques à ceux qui sont concernés
Hors ligne
#4 Fri 21 March 2008 13:39
- Cla1r3
- Juste Inscrit !
- Date d'inscription: 7 Sep 2007
- Messages: 7
Re: ecriture sous IDL d'un entier en binaire sur plus de 8 bits
Quand on crée une variable à partir d'un nombre, IDL détecte automatiquement le type. Ca peut être un problème parfois. Ou alors si on souhaite sout simplement mieux controler le typage initial d'une variable:
a = 5
crée par défaut un enter 16-bit (INT) (vrai dans la plupart des cas sauf si on utilise l'option "COMPILE_OPT IDL2")
si on souhaite stocker cette valeur sur 8-bit, on peut écrire:
a = 5B
équivaut à:
a = BYTE(5)
Dans l'Aide en ligne d'IDL, tu trouveras aussi les 'suffixes' pour tous les autres types de données. Par exemple:
Pour le type INT:
b = 0S
équivaut à:
b = FIX(0)
Pour le type LONG:
d = 0L
équivaut à:
d = LONG(0)
Pour le type DOUBLE:
i = 0.0D
équivaut à:
i = DOUBLE(0)
etc.
Mais tu le sais probablement, ca ne typera pas définitivement la variable (les variables IDL changent de type selon le contexte). Pour conserver le type d'une variable, il faut passer au variables systèmes par exemple.
Claire
Hors ligne
Pages: 1
- Sujet précédent - ecriture sous IDL d'un entier en binaire sur plus de 8 bits - Sujet suivant