[Dcmlib] [Fwd: Re: Lecture / Ecriture DICOM #2]
Jean-Pierre Roux
jpr at creatis.insa-lyon.fr
Wed May 5 18:31:17 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 suis en pleine
phase de modifs cataclysmiques, je ne veux 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 {
> for(int j=0; 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