18#ifndef itkImageFileCastWriter_h
19#define itkImageFileCastWriter_h
21#include "itkImageFileWriter.h"
22#include "itkImageIOBase.h"
25#include "itkImageIORegion.h"
26#include "itkCastImageFilter.h"
41template <
typename TInputImage>
60 using typename Superclass::InputImageType;
61 using typename Superclass::InputImagePointer;
62 using typename Superclass::InputImageRegionType;
63 using typename Superclass::InputImagePixelType;
70 itkSetStringMacro(OutputComponentType);
71 itkGetStringMacro(OutputComponentType);
90 template <
typename OutputComponentType>
94 using DiskImageType = Image<OutputComponentType, InputImageDimension>;
95 using InputImageComponentType =
typename PixelTraits<InputImagePixelType>::ValueType;
96 using ScalarInputImageType = Image<InputImageComponentType, InputImageDimension>;
99 this->GetModifiableImageIO()->SetPixelTypeInfo(
static_cast<const OutputComponentType *
>(
nullptr));
102 const auto caster = CastImageFilter<ScalarInputImageType, DiskImageType>::New();
104 const auto localInputImage = ScalarInputImageType::New();
106 localInputImage->Graft(
static_cast<const ScalarInputImageType *
>(&inputImage));
108 caster->SetInput(localInputImage);
112 return caster->GetOutput()->GetBufferPointer();
120 template <
typename TResultPixel>
133 template <
typename... TResultPixel>
137 if (
const void * outputDataBuffer =
nullptr;
140 return outputDataBuffer;
151template <
typename TImage>
154 const std::string & filename,
155 const std::string & outputComponentType,
159 writer.SetInput(&image);
160 writer.SetFileName(filename);
161 writer.SetOutputComponentType(outputComponentType);
162 writer.SetUseCompression(compress);
168#ifndef ITK_MANUAL_INSTANTIATION
169# include "itkImageFileCastWriter.hxx"
ImageFileCastWriter()=default
std::string m_OutputComponentType
ITK_DISALLOW_COPY_AND_MOVE(ImageFileCastWriter)
ImageFileWriter< TInputImage > Superclass
ProcessObject::Pointer m_Caster
const void * ConvertScalarImage(const DataObject &inputImage)
~ImageFileCastWriter() override=default
SmartPointer< Self > Pointer
bool ConvertScalarImageIfPixelTypesMatch(const DataObject &inputImage, const void *&outputDataBuffer)
SmartPointer< const Self > ConstPointer
const void * ConvertScalarImageAsSpecifiedByFixedWidthPixelType(const DataObject &inputImage)
itkStaticConstMacro(InputImageDimension, unsigned int, TInputImage::ImageDimension)
void GenerateData() override
itkOverrideGetNameOfClassMacro(ImageFileCastWriter)
static std::string GetDefaultOutputComponentType()
std::string PixelTypeToFixedWidthString()
void WriteCastedImage(const TImage &image, const std::string &filename, const std::string &outputComponentType, bool compress)