- // to load the image line by line, starting from the end:
- int NumColumns = GdcmFile.GetXSize();
- int NumLines = GdcmFile.GetYSize();
- int NumPlanes = GdcmFile.GetZSize();
- int LineSize = NumColumns * GdcmFile.GetPixelSize();
- unsigned char * Source = (unsigned char*)GdcmFile.GetImageData();
+ // to load the image line by line, starting from the end.
+ int NumColumns = GdcmFile.GetHeader()->GetXSize();
+ int NumLines = GdcmFile.GetHeader()->GetYSize();
+ int NumPlanes = GdcmFile.GetHeader()->GetZSize();
+ int LineSize = NumComponents * NumColumns * GdcmFile.GetHeader()->GetPixelSize();
+
+ unsigned char * Source;
+ if( GdcmFile.GetHeader()->HasLUT() )
+ {
+ size = GdcmFile.GetImageDataSizeRaw();
+ Source = (unsigned char*) GdcmFile.GetImageDataRaw();
+ unsigned char *Lut = GdcmFile.GetHeader()->GetLUTRGBA();
+
+ if(!this->LookupTable) this->LookupTable = vtkLookupTable::New();
+ this->LookupTable->SetNumberOfTableValues(256);
+ for (int tmp=0; tmp<256; tmp++)
+ {
+ this->LookupTable->SetTableValue(tmp,
+ (float)Lut[4*tmp+0]/255.0,
+ (float)Lut[4*tmp+1]/255.0,
+ (float)Lut[4*tmp+2]/255.0,
+ 1);
+ }
+ this->LookupTable->SetRange(0,255);
+ vtkDataSetAttributes *a=this->GetOutput()->GetPointData();
+ a->GetScalars()->SetLookupTable(this->LookupTable);
+ free(Lut);
+ }
+ else
+ {
+ size = GdcmFile.GetImageDataSize();
+ Source = (unsigned char*)GdcmFile.GetImageData();
+ }