[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