Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef __mitkITKImageImport_txx
00020 #define __mitkITKImageImport_txx
00021 #include "mitkITKImageImport.h"
00022
00023 template <class TInputImage>
00024 mitk::ITKImageImport<TInputImage>::ITKImageImport()
00025 {
00026 }
00027
00028 template <class TInputImage>
00029 mitk::ITKImageImport<TInputImage>::~ITKImageImport()
00030 {
00031 }
00032
00033 template <class TInputImage>
00034 typename mitk::ITKImageImport<TInputImage>::InputImageType *
00035 mitk::ITKImageImport<TInputImage>::GetInput(void)
00036 {
00037 return static_cast<TInputImage*>(
00038 this->ProcessObject::GetInput(0));
00039 }
00040
00041 template <class TInputImage>
00042 void mitk::ITKImageImport<TInputImage>::SetInput(const InputImageType* input)
00043 {
00044 this->ProcessObject::SetNthInput(0, const_cast<TInputImage*>(input) );
00045 }
00046
00047 template <class TInputImage>
00048 void mitk::ITKImageImport<TInputImage>::SetGeometry(const Geometry3D* geometry)
00049 {
00050 if(geometry != NULL)
00051 {
00052 m_Geometry = static_cast<mitk::Geometry3D*>(geometry->Clone().GetPointer());
00053 }
00054 else
00055 {
00056 m_Geometry = NULL;
00057 }
00058 Modified();
00059 }
00060
00061 template <class TInputImage>
00062 void mitk::ITKImageImport<TInputImage>::GenerateOutputInformation()
00063 {
00064 InputImageConstPointer input = this->GetInput();
00065 mitk::Image::Pointer output = this->GetOutput();
00066
00067 itkDebugMacro(<<"GenerateOutputInformation()");
00068
00069 output->InitializeByItk(input.GetPointer());
00070
00071 if(m_Geometry.IsNotNull())
00072 {
00073 output->SetGeometry(m_Geometry);
00074 }
00075 }
00076
00077 template <class TInputImage>
00078 void mitk::ITKImageImport<TInputImage>::GenerateData()
00079 {
00080 InputImageConstPointer input = this->GetInput();
00081 mitk::Image::Pointer output = this->GetOutput();
00082
00083 output->SetImportChannel((void*)input->GetBufferPointer(), 0, mitk::Image::ReferenceMemory);
00084 }
00085
00086 template <class TInputImage>
00087 void mitk::ITKImageImport<TInputImage>::GenerateInputRequestedRegion()
00088 {
00089 Superclass::GenerateInputRequestedRegion();
00090
00091
00092
00093 InputImagePointer input =
00094 const_cast< TInputImage * > ( this->GetInput() );
00095
00096
00097
00098
00099
00100
00101 InputImageRegionType inputRegion;
00102 OutputToInputRegionCopierType regionCopier;
00103 regionCopier(inputRegion, this->GetOutput()->GetRequestedRegion());
00104 input->SetRequestedRegion( inputRegion );
00105 }
00106
00107 template <class TInputImage>
00108 void mitk::ITKImageImport<TInputImage>::SetNthOutput(unsigned int idx, itk::DataObject *output)
00109 {
00110 if((output == NULL) && (idx == 0))
00111 {
00112
00113
00114
00115
00116 InputImageConstPointer input = this->GetInput();
00117 mitk::Image::Pointer currentOutput = this->GetOutput();
00118 if(input.IsNotNull() && currentOutput.IsNotNull())
00119 currentOutput->SetChannel(input->GetBufferPointer());
00120 }
00121 Superclass::SetNthOutput(idx, output);
00122 }
00123
00124 template <typename ItkOutputImageType>
00125 mitk::Image::Pointer mitk::ImportItkImage(const itk::SmartPointer<ItkOutputImageType>& itkimage, const Geometry3D* geometry, bool update)
00126 {
00127 typename mitk::ITKImageImport<ItkOutputImageType>::Pointer importer = mitk::ITKImageImport<ItkOutputImageType>::New();
00128 importer->SetInput(itkimage);
00129 importer->SetGeometry(geometry);
00130 if(update)
00131 importer->Update();
00132 return importer->GetOutput();
00133 }
00134
00135 template <typename ItkOutputImageType>
00136 mitk::Image::Pointer mitk::ImportItkImage(const ItkOutputImageType* itkimage, const Geometry3D* geometry, bool update)
00137 {
00138 typename mitk::ITKImageImport<ItkOutputImageType>::Pointer importer = mitk::ITKImageImport<ItkOutputImageType>::New();
00139 importer->SetInput(itkimage);
00140 importer->SetGeometry(geometry);
00141 if(update)
00142 importer->Update();
00143 return importer->GetOutput();
00144 }
00145
00146 template <typename ItkOutputImageType>
00147 mitk::Image::Pointer mitk::GrabItkImageMemory(itk::SmartPointer<ItkOutputImageType>& itkimage, mitk::Image* mitkImage, const Geometry3D* geometry, bool update)
00148 {
00149 return GrabItkImageMemory( itkimage.GetPointer(), mitkImage, geometry, update );
00150 }
00151
00152 template <typename ItkOutputImageType>
00153 mitk::Image::Pointer mitk::GrabItkImageMemory(ItkOutputImageType* itkimage, mitk::Image* mitkImage, const Geometry3D* geometry, bool update)
00154 {
00155 if(update)
00156 itkimage->Update();
00157
00158 mitk::Image::Pointer resultImage;
00159 if(mitkImage != NULL)
00160 {
00161 resultImage = mitkImage;
00162 }
00163 else
00164 {
00165 resultImage = mitk::Image::New();
00166 }
00167 resultImage->InitializeByItk( itkimage );
00168 resultImage->SetImportVolume( itkimage->GetBufferPointer(), 0, 0,
00169 Image::ManageMemory );
00170 itkimage->GetPixelContainer()->ContainerManageMemoryOff();
00171
00172 if(geometry != NULL)
00173 resultImage->SetGeometry(static_cast<mitk::Geometry3D*>(geometry->Clone().GetPointer()));
00174
00175 return resultImage;
00176 }
00177
00178 #endif //__mitkITKImageImport_txx