[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