[Dcmlib] TestRescaleDicom
Mathieu Malaterre
mathieu.malaterre at kitware.com
Wed Nov 17 18:54:14 CET 2004
Salut JM,
Je viens d'essayer sur gdcmData/012345.002.050.dcm et ca ne marche pas.
Si j'essai de lire l'image produite, j'ai toujours un seg fault avec
vtkgdcmViewer. Est-ce que tu arrives a relire l'image ?
http://www.creatis.insa-lyon.fr/~malaterre/gdcm/output.dcm
Sur quelle image est-ce que tu as essaye ?
Merci,
Mathieu
jean-michel.rouet at philips.com wrote:
>
> Mathieu,
>
> ca ca fonctionne chez moi...
> La boucle for est un peu tricky, mais ca fonctionne car on passe de 16 a
> 8 et pas de 8 a 16 bits. Si tel etait le cas, il faudrait faire une
> boucle decroissante de rescaleSize a 0 !!! :p
>
> int TestRescaleDicom(char *input)
> {
> gdcm::File *f1 = new gdcm::File( input );
> gdcm::Header *header = f1->GetHeader();
>
> int dataSize = f1->GetImageDataSize();
> int rescaleSize = dataSize / 2;
>
> // Since we know the image is 16bits:
> uint16_t* imageData = (uint16_t*)f1->GetImageData();
>
> header->ReplaceOrCreateByNumber( "8", 0x0028, 0x0100);// BitsAllocated
> header->ReplaceOrCreateByNumber( "8", 0x0028, 0x0101);// BitsStored
> header->ReplaceOrCreateByNumber( "7", 0x0028, 0x0102);// HighBit
> header->SetImageDataSize(rescaleSize);
>
> // modify grayvalues: We assume the value were from 0 to 4*uint8_t max
> // and convert from 16 bits to 8 bits...
> uint8_t* tmp = (uint8_t *)imageData;
> for(int i=0; i<rescaleSize; i++) tmp[i] = imageData[i]/4;
>
> // write the image to a new file
> f1->WriteDcmExplVR( "/tmp/output.dcm" );
>
> // free memory
> delete f1;
>
> return 0;
> }
>
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> Dcmlib mailing list
> Dcmlib at creatis.insa-lyon.fr
> http://www.creatis.insa-lyon.fr/mailman/listinfo/dcmlib
More information about the Dcmlib
mailing list