19 MITK_INFO <<
"Instantiating CastToFloatImageFilter...";
20 SetNumberOfIndexedInputs(1);
21 SetNumberOfIndexedOutputs(1);
22 MITK_INFO <<
"Instantiating CastToFloatImageFilter...[Done]";
27 MITK_INFO <<
"Destructed CastToFloatImageFilter.";
30 template<
class TPixelType>
31 float*
CastData(
const void* inputArray,
unsigned long length)
33 float* outputArray =
new float[length];
34 for (
unsigned long i = 0; i < length; ++i)
36 outputArray[i] = (float)((TPixelType*)inputArray)[i];
46 std::string type = inputImage->GetPixelType().GetTypeAsString();
48 if (type ==
"scalar (float)" || type ==
" (float)")
50 outputImage->Initialize(mitk::MakeScalarPixelType<float>(), inputImage->GetDimension(), inputImage->GetDimensions());
51 outputImage->SetSpacing(inputImage->GetGeometry()->GetSpacing());
52 outputImage->SetImportVolume(
mitk::ImageWriteAccessor(inputImage).GetData(), 0, 0, mitk::Image::ImportMemoryManagementType::CopyMemory);
53 MITK_INFO <<
"Input is already float type. Nothing to do here.";
56 if (outputImage.IsNull())
61 unsigned long length = 1;
62 for (
unsigned int i = 0, limit = inputImage->GetDimension(); i < limit; ++i)
63 length *= inputImage->GetDimensions()[i];
69 if (type ==
"scalar (short)" || type ==
" (short)")
70 outputData = CastData<short>(readAccess.
GetData(), length);
71 else if (type ==
"scalar (unsigned short)" || type ==
" (unsigned short)" || type ==
" (unsigned_short)" || type ==
"scalar (unsigned_short)")
72 outputData = CastData<unsigned short>(readAccess.
GetData(), length);
73 else if (type ==
"scalar (int)" || type ==
" (int)")
74 outputData = CastData<int>(readAccess.
GetData(), length);
75 else if (type ==
"scalar (unsigned int)" || type ==
" (unsigned int)" || type ==
" (unsigned_int)" || type ==
"scalar (unsigned_int)")
76 outputData = CastData<unsigned int>(readAccess.
GetData(), length);
77 else if (type ==
"scalar (double)" || type ==
" (double)")
78 outputData = CastData<double>(readAccess.
GetData(), length);
79 else if (type ==
"scalar (long)" || type ==
" (long)")
80 outputData = CastData<long>(readAccess.
GetData(), length);
82 mitkThrow() <<
"The given image has a datatype that is not yet supported. Given datatype: " << type;
84 outputImage->Initialize(mitk::MakeScalarPixelType<float>(), inputImage->GetDimension(), inputImage->GetDimensions());
85 outputImage->SetSpacing(inputImage->GetGeometry()->GetSpacing());
86 outputImage->SetImportVolume(outputData, 0, 0, mitk::Image::ImportMemoryManagementType::CopyMemory);
float * CastData(const void *inputArray, unsigned long length)
void GenerateData() override
~CastToFloatImageFilter() override
InputImageType * GetInput(void)
OutputType * GetOutput()
Get the output data of this image source object.
ImageWriteAccessor class to get locked write-access for a particular image part.
ImageReadAccessor class to get locked read access for a particular image part.
const void * GetData() const
Gives const access to the data.