Nous utilisons des cookies pour vous garantir la meilleure expérience sur notre site. Si vous continuez à utiliser ce dernier, nous considèrerons que vous acceptez l'utilisation des cookies. J'ai compris ! ou En savoir plus !.
banniere

Le portail francophone de la géomatique


Toujours pas inscrit ? Mot de passe oublié ?
Nom d'utilisateur    Mot de passe              Toujours pas inscrit ?   Mot de passe oublié ?

Annonce

Rencontres QGIS 2025

L'appel à participation est ouvert jusqu'au 19 janvier 2025!

#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

 

Pied de page des forums

Powered by FluxBB