You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
237 lines
8.1 KiB
237 lines
8.1 KiB
/*=========================================================================
|
|
|
|
Program: Visualization Toolkit
|
|
Module: $RCSfile: vtkImageReader2.h,v $
|
|
|
|
Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
|
|
All rights reserved.
|
|
See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
|
|
|
|
This software is distributed WITHOUT ANY WARRANTY; without even
|
|
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
|
|
PURPOSE. See the above copyright notice for more information.
|
|
|
|
=========================================================================*/
|
|
// .NAME vtkImageReader2 - Superclass of binary file readers.
|
|
// .SECTION Description
|
|
// vtkImageReader2 is the parent class for vtkImageReader. It
|
|
// is a good super class for streaming readers that do not require
|
|
// a mask or transform on the data. vtkImageReader was implemented
|
|
// before vtkImageReader2, vtkImageReader2 is intended to have
|
|
// a simpler interface.
|
|
|
|
// .SECTION See Also
|
|
// vtkJPEGReader vtkPNGReader vtkImageReader vtkGESignaReader
|
|
|
|
#ifndef __vtkImageReader2_h
|
|
#define __vtkImageReader2_h
|
|
|
|
#include "vtkImageAlgorithm.h"
|
|
|
|
#define VTK_FILE_BYTE_ORDER_BIG_ENDIAN 0
|
|
#define VTK_FILE_BYTE_ORDER_LITTLE_ENDIAN 1
|
|
|
|
class VTK_IO_EXPORT vtkImageReader2 : public vtkImageAlgorithm
|
|
{
|
|
public:
|
|
static vtkImageReader2 *New();
|
|
vtkTypeRevisionMacro(vtkImageReader2,vtkImageAlgorithm);
|
|
void PrintSelf(ostream& os, vtkIndent indent);
|
|
|
|
// Description:
|
|
// Specify file name for the image file. You should specify either
|
|
// a FileName or a FilePrefix. Use FilePrefix if the data is stored
|
|
// in multiple files.
|
|
virtual void SetFileName(const char *);
|
|
vtkGetStringMacro(FileName);
|
|
|
|
// Description:
|
|
// Specify file prefix for the image file(s).You should specify either
|
|
// a FileName or FilePrefix. Use FilePrefix if the data is stored
|
|
// in multiple files.
|
|
virtual void SetFilePrefix(const char *);
|
|
vtkGetStringMacro(FilePrefix);
|
|
|
|
// Description:
|
|
// The sprintf format used to build filename from FilePrefix and number.
|
|
virtual void SetFilePattern(const char *);
|
|
vtkGetStringMacro(FilePattern);
|
|
|
|
// Description:
|
|
// Set the data type of pixels in the file.
|
|
// If you want the output scalar type to have a different value, set it
|
|
// after this method is called.
|
|
virtual void SetDataScalarType(int type);
|
|
virtual void SetDataScalarTypeToFloat(){this->SetDataScalarType(VTK_FLOAT);}
|
|
virtual void SetDataScalarTypeToDouble(){this->SetDataScalarType(VTK_DOUBLE);}
|
|
virtual void SetDataScalarTypeToInt(){this->SetDataScalarType(VTK_INT);}
|
|
virtual void SetDataScalarTypeToShort(){this->SetDataScalarType(VTK_SHORT);}
|
|
virtual void SetDataScalarTypeToUnsignedShort()
|
|
{this->SetDataScalarType(VTK_UNSIGNED_SHORT);}
|
|
virtual void SetDataScalarTypeToUnsignedChar()
|
|
{this->SetDataScalarType(VTK_UNSIGNED_CHAR);}
|
|
|
|
// Description:
|
|
// Get the file format. Pixels are this type in the file.
|
|
vtkGetMacro(DataScalarType, int);
|
|
|
|
// Description:
|
|
// Set/Get the number of scalar components
|
|
vtkSetMacro(NumberOfScalarComponents,int);
|
|
vtkGetMacro(NumberOfScalarComponents,int);
|
|
|
|
// Description:
|
|
// Get/Set the extent of the data on disk.
|
|
vtkSetVector6Macro(DataExtent,int);
|
|
vtkGetVector6Macro(DataExtent,int);
|
|
|
|
// Description:
|
|
// The number of dimensions stored in a file. This defaults to two.
|
|
vtkSetMacro(FileDimensionality, int);
|
|
int GetFileDimensionality() {return this->FileDimensionality;}
|
|
|
|
// Description:
|
|
// Set/Get the spacing of the data in the file.
|
|
vtkSetVector3Macro(DataSpacing,double);
|
|
vtkGetVector3Macro(DataSpacing,double);
|
|
|
|
// Description:
|
|
// Set/Get the origin of the data (location of first pixel in the file).
|
|
vtkSetVector3Macro(DataOrigin,double);
|
|
vtkGetVector3Macro(DataOrigin,double);
|
|
|
|
// Description:
|
|
// Get the size of the header computed by this object.
|
|
unsigned long GetHeaderSize();
|
|
unsigned long GetHeaderSize(unsigned long slice);
|
|
|
|
// Description:
|
|
// If there is a tail on the file, you want to explicitly set the
|
|
// header size.
|
|
virtual void SetHeaderSize(unsigned long size);
|
|
|
|
// Description:
|
|
// These methods should be used instead of the SwapBytes methods.
|
|
// They indicate the byte ordering of the file you are trying
|
|
// to read in. These methods will then either swap or not swap
|
|
// the bytes depending on the byte ordering of the machine it is
|
|
// being run on. For example, reading in a BigEndian file on a
|
|
// BigEndian machine will result in no swapping. Trying to read
|
|
// the same file on a LittleEndian machine will result in swapping.
|
|
// As a quick note most UNIX machines are BigEndian while PC's
|
|
// and VAX tend to be LittleEndian. So if the file you are reading
|
|
// in was generated on a VAX or PC, SetDataByteOrderToLittleEndian
|
|
// otherwise SetDataByteOrderToBigEndian.
|
|
virtual void SetDataByteOrderToBigEndian();
|
|
virtual void SetDataByteOrderToLittleEndian();
|
|
virtual int GetDataByteOrder();
|
|
virtual void SetDataByteOrder(int);
|
|
virtual const char *GetDataByteOrderAsString();
|
|
|
|
// Description:
|
|
// When reading files which start at an unusual index, this can be added
|
|
// to the slice number when generating the file name (default = 0)
|
|
vtkSetMacro(FileNameSliceOffset,int);
|
|
vtkGetMacro(FileNameSliceOffset,int);
|
|
|
|
// Description:
|
|
// When reading files which have regular, but non contiguous slices
|
|
// (eg filename.1,filename.3,filename.5)
|
|
// a spacing can be specified to skip missing files (default = 1)
|
|
vtkSetMacro(FileNameSliceSpacing,int);
|
|
vtkGetMacro(FileNameSliceSpacing,int);
|
|
|
|
|
|
// Description:
|
|
// Set/Get the byte swapping to explicitly swap the bytes of a file.
|
|
vtkSetMacro(SwapBytes,int);
|
|
virtual int GetSwapBytes() {return this->SwapBytes;}
|
|
vtkBooleanMacro(SwapBytes,int);
|
|
|
|
//BTX
|
|
ifstream *GetFile() {return this->File;}
|
|
vtkGetVectorMacro(DataIncrements,unsigned long,4);
|
|
//ETX
|
|
|
|
virtual int OpenFile();
|
|
virtual void SeekFile(int i, int j, int k);
|
|
|
|
// Description:
|
|
// Set/Get whether the data comes from the file starting in the lower left
|
|
// corner or upper left corner.
|
|
vtkBooleanMacro(FileLowerLeft, int);
|
|
vtkGetMacro(FileLowerLeft, int);
|
|
vtkSetMacro(FileLowerLeft, int);
|
|
|
|
// Description:
|
|
// Set/Get the internal file name
|
|
virtual void ComputeInternalFileName(int slice);
|
|
vtkGetStringMacro(InternalFileName);
|
|
|
|
// Description:
|
|
// Return non zero if the reader can read the given file name.
|
|
// Should be implemented by all sub-classes of vtkImageReader2.
|
|
// For non zero return values the following values are to be used
|
|
// 1 - I think I can read the file but I cannot prove it
|
|
// 2 - I definitely can read the file
|
|
// 3 - I can read the file and I have validated that I am the
|
|
// correct reader for this file
|
|
virtual int CanReadFile(const char* vtkNotUsed(fname))
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
// Description:
|
|
// Get the file extensions for this format.
|
|
// Returns a string with a space separated list of extensions in
|
|
// the format .extension
|
|
virtual const char* GetFileExtensions()
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
// Description:
|
|
// Return a descriptive name for the file format that might be useful in a GUI.
|
|
virtual const char* GetDescriptiveName()
|
|
{
|
|
return 0;
|
|
}
|
|
protected:
|
|
vtkImageReader2();
|
|
~vtkImageReader2();
|
|
|
|
char *InternalFileName;
|
|
char *FileName;
|
|
char *FilePrefix;
|
|
char *FilePattern;
|
|
int NumberOfScalarComponents;
|
|
int FileLowerLeft;
|
|
|
|
ifstream *File;
|
|
unsigned long DataIncrements[4];
|
|
int DataExtent[6];
|
|
int SwapBytes;
|
|
|
|
int FileDimensionality;
|
|
unsigned long HeaderSize;
|
|
int DataScalarType;
|
|
unsigned long ManualHeaderSize;
|
|
|
|
double DataSpacing[3];
|
|
double DataOrigin[3];
|
|
|
|
int FileNameSliceOffset;
|
|
int FileNameSliceSpacing;
|
|
|
|
virtual int RequestInformation(vtkInformation* request,
|
|
vtkInformationVector** inputVector,
|
|
vtkInformationVector* outputVector);
|
|
virtual void ExecuteInformation();
|
|
virtual void ExecuteData(vtkDataObject *data);
|
|
virtual void ComputeDataIncrements();
|
|
private:
|
|
vtkImageReader2(const vtkImageReader2&); // Not implemented.
|
|
void operator=(const vtkImageReader2&); // Not implemented.
|
|
};
|
|
|
|
#endif
|
|
|