[Dcmlib] Re: Lecture / Ecriture DICOM #2

Jean-Pierre Roux jpr at creatis.insa-lyon.fr
Wed May 5 17:51:52 CEST 2004


Mathieu Malaterre wrote:

> Ok,
>     J'ai enfin elucide le mystere de l'ecriture DICOM ici, y'avait 
> deja un probleme pour l'entete DICOM (j'ai du remplacer un calloc par 
> un new, et pas faire un memset apres)
>     Mais le plus important c'est qu'il faut appeler 
> gdcmFile::GetImageData() pour que ca marche et je ne comprends pas 
> bien pourquoi: 

En effet !
Il y a un flag de nom PixelRead, positionné à -1 dans le constructeur du 
gdcmFile qui signale si les Pixels ont été lus ou non, pour éviter qu'un 
mal dégourdi n'essaye de ré-écrire une image sans avoir lu les pixels.

Il y a un maldégourdi qui a oublié de passer ce flag à 1 dans 
SetImageData. cxx

 
bool gdcmFile::SetImageData(void * inData, size_t ExpectedSize) {
   Header->SetImageDataSize(ExpectedSize);
   PixelData = inData;
   lgrTotale = ExpectedSize;

PixelRead = 1;  // A RAJOUTER.

   return(true);
}
Pourrais-tu faire la modif et la commiter si ça marche (je sui en pleine 
phase de modifs cataclysmiques, je ne veyx pas prendre le rique de faire 
un commit sur des fichiers 'actifs')

Thx

>
>
>
>   gdcmHeader *header = new gdcmHeader( "foo.dcm" );
>   gdcmFile   *file = new gdcmFile( header );
>
>
>   file->GetImageData(); //EXTREMELY IMPORTANT ??
>
>   unsigned short *imageData = new unsigned short[x*y];
>   unsigned short *begin = imageData;
>   for(int i=0; i<x;i++)
>     {
>     for(int j=0; j<y;j++)
>       {
>       if( i == j || (i+1) == j || (i-1) == j)
>         *begin++ = 0;
>       else
>         *begin++ = 255*255;
>       }
>     }
>
>   file->SetImageData(imageData, dataSize);
>   file->WriteDcmExplVR( filename2 );
>
>
> ca ca ne marche que si j'appelle GetImageData ? Je comprends pas vu 
> que je n'utilise pas l'image, est-ce qu'il y a une methode plus 
> appropriee que celle la et qui fais que l'ecriture marche qd meme ?
>
> Merci
> Mathieu
>
>





More information about the Dcmlib mailing list