[Dcmlib] TestRescaleDicom

Mathieu Malaterre mathieu.malaterre at kitware.com
Wed Nov 17 21:32:16 CET 2004


Jean Michel,

	Ok j'ai trouve mon probleme. L'image que je lisais a l'origine etait :

0028|0103 lg :       x(2) 2        Off.:    x(1082) 4226    [US] 
                                        [Pixel Representation] [1] x(1)


Et vtkgdcmViewer seg fault sur du 8bits signed (c'est une feature :P).

Merci tout de meme du coup de pouce...au moins je savais que ca marchait 
chez quelqu'un.
Matt


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