[Dcmlib] TestChangeHeader

Jean-Pierre Roux Jean-Pierre.Roux at creatis.insa-lyon.fr
Wed Sep 8 18:59:17 CEST 2004


Mathieu Malaterre wrote:

> Salut,
>
>     J'ai un peu mis a jour le reader/writer d'ITK. Maintenant je copie
tous (ou presque) les champs dans un structures ITK (en fait c'est
aussi une map en interne). Ensuite je reparcours ma map ITK et je
rempli celle de gdcm pour ecrire l'image.
>
>     J'ai eu un probleme avec matrix aquisition il a l'air d'etre fixe.

C'etait un pb general sur tous les champs 'entiers', multivalues.
A part Matrix Aquisition, on ne doit pas en avoir d'autre dans gdcmData ...

> Ensuite j'ai quelques questions:
>
> - Est-ce que ca vaut le coup que je m'occupe des champs prives ? En fait
des que je trouve 'unkn' je saute le champ.

Pour qu'il y ai 'unkn', il faut que l'image soit en Implicit Value
Representation et que le champ soit privé.
Dans le cas, on n'est meme pas sur d'avoir ammene la valeur correctement
en mémoire (et on n'a aucune moyen de le savoir).

> Est-ce que plus tard un utilisateur pourra avoir un dictionaire Dicom
prive pour que ces champs ne soient pas ecartes ?
>
En l'absence de Dictionnaire DICOM prive fourni par l'utilisateur,
(c'etait prévu, mais on n'en a jamais eu) on ne peut rien faire avec ce
champ.

> - Qu'est que je suis sense faire avec les 'gdcm::Binary data loaded with
length is xxx'. Qu'est ce que ca represente ?



Lorsque la valeur est 'gdcm::Binary data loaded with length is xxx' (la
syntaxe du message n'est pas de moi), c'est que l'on a a faire a une
variete particuliere de gdcmDocEntry, a savoir un gdcmBinEntry (qui est
lui meme un cas particulier de gdcmValEntry)
La valeur 'Binaire' (c'est a dire non convertie, pour des raison de
convenances personnelles en std::string) se trouve dans le champ protected
VoidArea.
On peut recuperer un pointeur sur lui par gdcmBinEntry:: GetVoidArea().

La methode Write est supposee prendre ca en charge.

>
> Qu'est que je suis sense faire avec les 'gdcm::Binary data NOT loaded?
Est-ce qu'il faut que je les concerve pour les ecrire plus tard ?
Comment 'charger' celles qui sont 'NOT loaded' ?

Il manque effectivement une methode privee "ForceLoad", qui serait
appellee en interne au moment du Write, qui ouvrirait de nouveau le
fichier et qui ferait des fseek + fread pour charger tout ce qui est Not
Loaded (et peut etre aussi une methode publique SetForceLoad qui permetra
de dire a l'utilisateur s'il veut forcer le chargement, ou bien laisser
tomber)
Il faudrait peut etre aussi des accesseurs pour dire si on veut, a
l'ecriture, laisser tomber *tous* les champs prives, ou laisser tomber les
Sequences (gdcmSeqEntry).

Je suis en train de me tirer des plombs sur ... la lecture :
Actuellement, lorsque l'utilisateur fait un GetImageData sur une image
contenant une LUT, on tranfsorme automatiquement l'image en RGB, et on
modifie l'entete pour qu'elle soit coherente avec les pixels en memoire.
Si l'utilisateur fait, juste apres, un GetImageDataRaw, pour recuperer les
pixels 'gray level' + la LUT, ca pete, car le header ainsi modifie n'est
plus coherent avec le fichier sur disque.
Le pb etait connu, on ne l'a jamais eu (mais il suffirait d'ecrire le
'bon' programme pour l'avoir ...)

Je crois que je vais mettre ca entre parentheses pour traiter les 'Not
Loaded' , ca a l'air + urgent.

JPRx



> Mathieu




More information about the Dcmlib mailing list