/*========================================================================= Program: Visualization Toolkit Module: vtkImageCast.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 vtkImageCast * @brief Image Data type Casting Filter * * vtkImageCast filter casts the input type to match the output type in * the image processing pipeline. The filter does nothing if the input * already has the correct type. To specify the "CastTo" type, * use "SetOutputScalarType" method. * * @warning * As vtkImageCast only casts values without rescaling them, its use is not * recommented. vtkImageShiftScale is the recommented way to change the type * of an image data. * * @sa * vtkImageThreshold vtkImageShiftScale */ #ifndef vtkImageCast_h #define vtkImageCast_h #include "vtkImagingCoreModule.h" // For export macro #include "vtkThreadedImageAlgorithm.h" class VTKIMAGINGCORE_EXPORT vtkImageCast : public vtkThreadedImageAlgorithm { public: static vtkImageCast *New(); vtkTypeMacro(vtkImageCast,vtkThreadedImageAlgorithm); void PrintSelf(ostream& os, vtkIndent indent) override; //@{ /** * Set the desired output scalar type to cast to. */ vtkSetMacro(OutputScalarType,int); vtkGetMacro(OutputScalarType,int); void SetOutputScalarTypeToFloat(){this->SetOutputScalarType(VTK_FLOAT);}; void SetOutputScalarTypeToDouble(){this->SetOutputScalarType(VTK_DOUBLE);}; void SetOutputScalarTypeToInt(){this->SetOutputScalarType(VTK_INT);}; void SetOutputScalarTypeToUnsignedInt() {this->SetOutputScalarType(VTK_UNSIGNED_INT);}; void SetOutputScalarTypeToLong(){this->SetOutputScalarType(VTK_LONG);}; void SetOutputScalarTypeToUnsignedLong() {this->SetOutputScalarType(VTK_UNSIGNED_LONG);}; void SetOutputScalarTypeToShort(){this->SetOutputScalarType(VTK_SHORT);}; void SetOutputScalarTypeToUnsignedShort() {this->SetOutputScalarType(VTK_UNSIGNED_SHORT);}; void SetOutputScalarTypeToUnsignedChar() {this->SetOutputScalarType(VTK_UNSIGNED_CHAR);}; void SetOutputScalarTypeToChar() {this->SetOutputScalarType(VTK_CHAR);}; //@} //@{ /** * When the ClampOverflow flag is on, the data is thresholded so that * the output value does not exceed the max or min of the data type. * Clamping is safer because otherwise you might invoke undefined * behavior (and may crash) if the type conversion is out of range * of the data type. On the other hand, clamping is slower. * By default ClampOverflow is off. */ vtkSetMacro(ClampOverflow, int); vtkGetMacro(ClampOverflow, int); vtkBooleanMacro(ClampOverflow, int); //@} protected: vtkImageCast(); ~vtkImageCast() override {} int ClampOverflow; int OutputScalarType; int RequestInformation (vtkInformation *, vtkInformationVector**, vtkInformationVector *) override; void ThreadedExecute (vtkImageData *inData, vtkImageData *outData, int ext[6], int id) override; private: vtkImageCast(const vtkImageCast&) = delete; void operator=(const vtkImageCast&) = delete; }; #endif