X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=vtk%2FvtkGdcmReader.cxx;h=83ec322f16dcbb769f4379aa18cf23161182a32a;hb=1fb4f629dab6cff0a5e8951b105b7095ab369ae4;hp=e92fd5b3f17f2cd4cd70c5189042f8f32fa95412;hpb=4b22e3b8d982d7d46d64aea9f71b2fd04b1a394d;p=gdcm.git diff --git a/vtk/vtkGdcmReader.cxx b/vtk/vtkGdcmReader.cxx index e92fd5b3..83ec322f 100644 --- a/vtk/vtkGdcmReader.cxx +++ b/vtk/vtkGdcmReader.cxx @@ -1,4 +1,4 @@ -// $Header: /cvs/public/gdcm/vtk/vtkGdcmReader.cxx,v 1.23 2003/11/03 10:51:47 jpr Exp $ +// $Header: /cvs/public/gdcm/vtk/vtkGdcmReader.cxx,v 1.26 2003/11/06 14:14:10 malaterre Exp $ // ////////////////////////////////////////////////////////////// // WARNING TODO CLENAME // Actual limitations of this code: @@ -46,6 +46,7 @@ #include #include #include +#include #include "vtkGdcmReader.h" #include "gdcm.h" #include "gdcmHeaderHelper.h" @@ -53,6 +54,7 @@ vtkGdcmReader::vtkGdcmReader() { // Constructor + this->LookupTable = NULL; } //---------------------------------------------------------------------------- @@ -60,6 +62,7 @@ vtkGdcmReader::~vtkGdcmReader() { this->RemoveAllFileName(); this->InternalFileNameList.clear(); + if(this->LookupTable) this->LookupTable->Delete(); } //---------------------------------------------------------------------------- @@ -239,7 +242,7 @@ int vtkGdcmReader::CheckFileCoherence() && (type != "32U") && (type != "32S") ) { vtkErrorMacro("Bad File Type for file" << FileName->c_str()); - vtkErrorMacro(" " << type); + vtkErrorMacro(" " << type.c_str()); vtkErrorMacro("Removing this file from readed files " << FileName->c_str()); *FileName = "GDCM_UNREADABLE"; @@ -309,11 +312,14 @@ int vtkGdcmReader::CheckFileCoherence() this->ImageType = type; this->PixelSize = GdcmHeader.GetPixelSize(); - // JPR to Mathieu: - // Be carefull : when u'll pane to use 'GetImageDataRaw', - // use 'GetNumberOfScalarComponentsRaw' ! - - this->NumComponents = GdcmHeader.GetNumberOfScalarComponents(); //rgb or mono + if( GdcmHeader.HasLUT() ) + { + this->NumComponents = GdcmHeader.GetNumberOfScalarComponentsRaw(); + } + else + { + this->NumComponents = GdcmHeader.GetNumberOfScalarComponents(); //rgb or mono + } //Set image spacing this->DataSpacing[0] = GdcmHeader.GetXSpacing(); @@ -455,7 +461,7 @@ size_t vtkGdcmReader::LoadImageInMemory( { vtkDebugMacro("Copying to memory image" << FileName.c_str()); gdcmFile GdcmFile(FileName.c_str()); - size_t size = GdcmFile.GetImageDataSize(); + size_t size; // If the data structure of vtk for image/volume representation // were straigthforwards the following would suffice: @@ -467,7 +473,34 @@ size_t vtkGdcmReader::LoadImageInMemory( int NumLines = GdcmFile.GetYSize(); int NumPlanes = GdcmFile.GetZSize(); int LineSize = NumComponents * NumColumns * GdcmFile.GetPixelSize(); - unsigned char * Source = (unsigned char*)GdcmFile.GetImageData(); + + unsigned char * Source; + if( GdcmFile.HasLUT() ) + { + size = GdcmFile.GetImageDataSizeRaw(); + Source = (unsigned char*) GdcmFile.GetImageDataRaw(); + unsigned char *Lut = (unsigned char*) GdcmFile.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(); + } unsigned char * pSource = Source; //pointer for later deletion unsigned char * Destination = Dest + size - LineSize;