You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

200 lines
5.1 KiB
C++

/*=========================================================================
Program: Visualization Toolkit
Module: vtkTIFFReader.h
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.
=========================================================================*/
/**
* @class vtkTIFFReader
* @brief read TIFF files
*
* vtkTIFFReader is a source object that reads TIFF files.
* It should be able to read almost any TIFF file
*
* @sa
* vtkTIFFWriter
*/
#ifndef vtkTIFFReader_h
#define vtkTIFFReader_h
#include "vtkImageReader2.h"
class VTKIOIMAGE_EXPORT vtkTIFFReader : public vtkImageReader2
{
public:
static vtkTIFFReader* New();
vtkTypeMacro(vtkTIFFReader, vtkImageReader2);
void PrintSelf(ostream& os, vtkIndent indent) override;
/**
* Is the given file name a tiff file?
*/
int CanReadFile(const char* fname) override;
/**
* Get the file extensions for this format.
* Returns a string with a space separated list of extensions in
* the format .extension
*/
const char* GetFileExtensions() override { return ".tif .tiff"; }
/**
* Return a descriptive name for the file format that might be useful
* in a GUI.
*/
const char* GetDescriptiveName() override { return "TIFF"; }
/**
* Set orientation type
* ORIENTATION_TOPLEFT 1 (row 0 top, col 0 lhs)
* ORIENTATION_TOPRIGHT 2 (row 0 top, col 0 rhs)
* ORIENTATION_BOTRIGHT 3 (row 0 bottom, col 0 rhs)
* ORIENTATION_BOTLEFT 4 (row 0 bottom, col 0 lhs)
* ORIENTATION_LEFTTOP 5 (row 0 lhs, col 0 top)
* ORIENTATION_RIGHTTOP 6 (row 0 rhs, col 0 top)
* ORIENTATION_RIGHTBOT 7 (row 0 rhs, col 0 bottom)
* ORIENTATION_LEFTBOT 8 (row 0 lhs, col 0 bottom)
* User need to explicitly include vtk_tiff.h header to have access to those #define
*/
void SetOrientationType(unsigned int orientationType);
vtkGetMacro(OrientationType, unsigned int);
//@{
/**
* Get method to check if orientation type is specified.
*/
vtkGetMacro(OrientationTypeSpecifiedFlag, bool);
//@}
//@{
/**
* Set/get methods to see if manual origin has been set.
*/
vtkSetMacro(OriginSpecifiedFlag, bool);
vtkGetMacro(OriginSpecifiedFlag, bool);
vtkBooleanMacro(OriginSpecifiedFlag, bool);
//@}
//@{
/**
* Set/get if the spacing flag has been specified.
*/
vtkSetMacro(SpacingSpecifiedFlag, bool);
vtkGetMacro(SpacingSpecifiedFlag, bool);
vtkBooleanMacro(SpacingSpecifiedFlag, bool);
//@}
//@{
/**
* When set to true (default false), TIFFTAG_COLORMAP, if any, will be
* ignored.
*/
vtkSetMacro(IgnoreColorMap, bool);
vtkGetMacro(IgnoreColorMap, bool);
vtkBooleanMacro(IgnoreColorMap, bool);
//@}
protected:
vtkTIFFReader();
~vtkTIFFReader() override;
enum
{
NOFORMAT,
RGB,
GRAYSCALE,
PALETTE_RGB,
PALETTE_GRAYSCALE,
OTHER
};
void ExecuteInformation() override;
void ExecuteDataWithInformation(vtkDataObject* out, vtkInformation* outInfo) override;
class vtkTIFFReaderInternal;
vtkTIFFReaderInternal* InternalImage;
private:
vtkTIFFReader(const vtkTIFFReader&) = delete;
void operator=(const vtkTIFFReader&) = delete;
/**
* Evaluates the image at a single pixel location.
*/
template <typename T>
int EvaluateImageAt(T* out, T* in);
/**
* Look up color paletter values.
*/
void GetColor(int index, unsigned short* r, unsigned short* g, unsigned short* b);
// To support Zeiss images
void ReadTwoSamplesPerPixelImage(void* out, unsigned int vtkNotUsed(width), unsigned int height);
unsigned int GetFormat();
/**
* Auxiliary methods used by the reader internally.
*/
void Initialize();
/**
* Internal method, do not use.
*/
template <typename T>
void ReadImageInternal(T* buffer);
/**
* Reads 3D data from multi-pages tiff.
*/
template <typename T>
void ReadVolume(T* buffer);
/**
* Reads 3D data from tiled tiff
*/
void ReadTiles(void* buffer);
/**
* Reads a generic image.
*/
template <typename T>
void ReadGenericImage(T* out, unsigned int width, unsigned int height);
/**
* Dispatch template to determine pixel type and decide on reader actions.
*/
template <typename T>
void Process(T* outPtr, int outExtent[6], vtkIdType outIncr[3]);
/**
* Second layer of dispatch necessary for some TIFF types.
*/
template <typename T>
void Process2(T* outPtr, int* outExt);
unsigned short* ColorRed;
unsigned short* ColorGreen;
unsigned short* ColorBlue;
int TotalColors;
unsigned int ImageFormat;
int OutputExtent[6];
vtkIdType OutputIncrements[3];
unsigned int OrientationType;
bool OrientationTypeSpecifiedFlag;
bool OriginSpecifiedFlag;
bool SpacingSpecifiedFlag;
bool IgnoreColorMap;
};
#endif