-// $Header: /cvs/public/gdcm/vtk/vtkGdcmReader.cxx,v 1.24 2003/11/04 14:02:03 jpr Exp $
+// $Header: /cvs/public/gdcm/vtk/vtkGdcmReader.cxx,v 1.25 2003/11/05 18:15:41 malaterre Exp $
// //////////////////////////////////////////////////////////////
// WARNING TODO CLENAME
// Actual limitations of this code:
#include <vtkObjectFactory.h>
#include <vtkImageData.h>
#include <vtkPointData.h>
+#include <vtkLookupTable.h>
#include "vtkGdcmReader.h"
#include "gdcm.h"
#include "gdcmHeaderHelper.h"
vtkGdcmReader::vtkGdcmReader()
{
// Constructor
+ this->LookupTable = vtkLookupTable::New();
}
//----------------------------------------------------------------------------
{
this->RemoveAllFileName();
this->InternalFileNameList.clear();
+ this->LookupTable->Delete();
}
//----------------------------------------------------------------------------
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();
{
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:
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();
+
+ 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;
-// $Header: /cvs/public/gdcm/vtk/vtkGdcmReader.h,v 1.10 2003/10/03 14:48:31 malaterre Exp $
+// $Header: /cvs/public/gdcm/vtk/vtkGdcmReader.h,v 1.11 2003/11/05 18:15:41 malaterre Exp $
#ifndef __vtkGdcmReader_h
#define __vtkGdcmReader_h
#include <list>
#include <string>
#include "vtkImageReader.h"
+class vtkLookupTable;
class VTK_EXPORT vtkGdcmReader : public vtkImageReader
{
void RemoveAllFileName(void);
void AddFileName(const char* name);
void SetFileName(const char *name);
+ vtkGetObjectMacro(LookupTable,vtkLookupTable);
protected:
vtkGdcmReader();
private:
void RemoveAllInternalFileName(void);
void AddInternalFileName(const char* name);
+ vtkLookupTable *LookupTable;
//BTX
// Number of columns of the image/volume to be loaded