vtkGdcmReader::vtkGdcmReader()
{
this->LookupTable = NULL;
+ this->AllowLookupTable = 0;
}
vtkGdcmReader::~vtkGdcmReader()
// Since we maintain a list of filenames, when building a volume,
// (see vtkGdcmReader::AddFileName), we additionaly need to purge
// this list when we manually positionate the filename.
+ vtkDebugMacro("Clearing all files given with AddFileName");
this->FileNameList.clear();
this->Modified();
}
{
// The memory size for a full stack of images of course depends
// on the number of planes and the size of each image:
- size_t StackNumPixels = this->NumColumns * this->NumLines
- * this->TotalNumberOfPlanes * this->NumComponents;
- size_t stack_size = StackNumPixels * this->PixelSize;
+ //size_t StackNumPixels = this->NumColumns * this->NumLines
+ // * this->TotalNumberOfPlanes * this->NumComponents;
+ //size_t stack_size = StackNumPixels * this->PixelSize; //not used
// Allocate pixel data space itself.
// Variables for the UpdateProgress. We shall use 50 steps to signify
*/
void vtkGdcmReader::BuildFileListFromPattern()
{
+ this->RemoveAllInternalFileName();
+
if ((! this->FileNameList.empty()) && this->FileName )
{
- vtkErrorMacro("Both file patterns and AddFileName schemes were used");
- vtkErrorMacro("Only the files specified with AddFileName shall be used");
+ vtkErrorMacro("Both AddFileName and SetFileName schemes were used");
+ vtkErrorMacro("No images loaded ! ");
+ return;
+ }
+
+ if ((! this->FileNameList.empty()) && this->FilePrefix )
+ {
+ vtkErrorMacro("Both AddFileName and SetFilePrefix schemes were used");
+ vtkErrorMacro("No images loaded ! ");
+ return;
+ }
+
+ if (this->FileName && this->FilePrefix)
+ {
+ vtkErrorMacro("Both SetFileName and SetFilePrefix schemes were used");
+ vtkErrorMacro("No images loaded ! ");
return;
}
return;
}
- if (!this->FileName && !this->FilePattern)
+ if (!this->FileName && !this->FilePrefix)
{
vtkErrorMacro("FileNames are not set. Either use AddFileName() or");
- vtkErrorMacro("specify a FileName or FilePattern.");
+ vtkErrorMacro("specify a FileName or FilePrefix.");
return;
}
- this->RemoveAllInternalFileName();
- if( this->FileNameList.empty() )
+ if( this->FileName )
{
- //Multiframe case:
+ // Single file loading (as given with ::SetFileName()):
+ // Case of multi-frame file considered here
this->ComputeInternalFileName(this->DataExtent[4]);
vtkDebugMacro("Adding file " << this->InternalFileName);
this->AddInternalFileName(this->InternalFileName);
}
else
{
- //stack of 2D dicom case:
+ // Multi file loading (as given with ::SetFilePattern()):
for (int idx = this->DataExtent[4]; idx <= this->DataExtent[5]; ++idx)
{
this->ComputeInternalFileName(idx);
}
fclose(fp);
- cout << " Try to gdcmHeader ... " << endl;
// Stage 1.2: check for Gdcm parsability
- gdcmHeaderHelper GdcmHeader(FileName->c_str(), false, true);
+ gdcmHeader GdcmHeader(FileName->c_str(), false, true);
// true : for enableSequences
if (!GdcmHeader.IsReadable())
{
this->ImageType = type;
this->PixelSize = GdcmHeader.GetPixelSize();
- if( GdcmHeader.HasLUT() )
+ if( GdcmHeader.HasLUT() && this->AllowLookupTable )
{
+ // I could raise an error is AllowLookupTable is on and HasLUT() off
this->NumComponents = GdcmHeader.GetNumberOfScalarComponentsRaw();
}
else
unsigned char * Source;
- if( GdcmFile.GetHeader()->HasLUT() )
+ if( GdcmFile.GetHeader()->HasLUT() && this->AllowLookupTable )
{
size = GdcmFile.GetImageDataSizeRaw();
Source = (unsigned char*) GdcmFile.GetImageDataRaw();
{
size = GdcmFile.GetImageDataSize();
Source = (unsigned char*)GdcmFile.GetImageData();
- }
+ }
+
unsigned char * pSource = Source; //pointer for later deletion
unsigned char * Destination = Dest + size - LineSize;
UpdateProgressCount++;
}
}
+
+// DO NOT remove this commented out code .
+// Nobody knows what's expecting you ...
+// Just to 'see' what was actually read on disk :-(
+
+// FILE * f2;
+// f2 = fopen("SpuriousFile.RAW","wb");
+// fwrite(Dest,size,1,f2);
+// fclose(f2);
+
//GetImageData allocate a (void*)malloc, remove it:
free(pSource);
return size;