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.

94 lines
3.4 KiB
C++

/*=========================================================================
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
* recommended. vtkImageShiftScale is the recommended 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, vtkTypeBool);
vtkGetMacro(ClampOverflow, vtkTypeBool);
vtkBooleanMacro(ClampOverflow, vtkTypeBool);
//@}
protected:
vtkImageCast();
~vtkImageCast() override {}
vtkTypeBool 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