+// -------------------------------------------------------------------------
+
+// We assume the use *does* know all the files whose names
+// are in InternalFileNameList exist, may be open, are gdcm-readable
+// have the same sizes, have the same 'pixel' type, are single frame
+// have the same color convention, ..., anything else ?
+
+int vtkGdcmReader::CheckFileCoherenceLight()
+{
+ std::list<std::string>::iterator filename = InternalFileNameList.begin();
+
+ gdcm::File GdcmFile;
+ GdcmFile.SetLoadMode( LoadMode );
+ GdcmFile.Load(filename->c_str() );
+ if (!GdcmFile.IsReadable())
+ {
+ vtkErrorMacro(<< "Gdcm cannot parse file " << filename->c_str());
+ vtkErrorMacro(<< "you should try vtkGdcmReader::CheckFileCoherence "
+ << "instead of try vtkGdcmReader::CheckFileCoherenceLight");
+ return 0;
+ }
+ int NX = GdcmFile.GetXSize();
+ int NY = GdcmFile.GetYSize();
+ // CheckFileCoherenceLight should be called *only* when user knows
+ // he deals with single frames files.
+ // Z size is then the number of files.
+ int NZ = InternalFileNameList.size();
+ std::string type = GdcmFile.GetPixelType();
+ vtkDebugMacro(<< "The first file is taken as reference: "
+ << filename->c_str());
+ vtkDebugMacro(<< "Image dimensions of reference file as read from Gdcm:"
+ << NX << " " << NY << " " << NZ);
+ vtkDebugMacro(<< "Number of planes added to the stack: " << NZ);
+ // Set aside the size of the image
+ this->NumColumns = NX;
+ this->NumLines = NY;
+ this->ImageType = type;
+ this->PixelSize = GdcmFile.GetPixelSize();
+
+ if( GdcmFile.HasLUT() && this->AllowLookupTable )
+ {
+ // I could raise an error is AllowLookupTable is on and HasLUT() off
+ this->NumComponents = GdcmFile.GetNumberOfScalarComponentsRaw();
+ }
+ else
+ {
+ this->NumComponents = GdcmFile.GetNumberOfScalarComponents(); //rgb or mono
+ }
+
+ //Set image spacing
+ this->DataSpacing[0] = GdcmFile.GetXSpacing();
+ this->DataSpacing[1] = GdcmFile.GetYSpacing();
+ this->DataSpacing[2] = GdcmFile.GetZSpacing();
+
+ return InternalFileNameList.size();
+}