Public Types | Public Member Functions | Static Public Member Functions | Protected Member Functions | Protected Attributes

mitk::ImageWriter Class Reference
[IO Classes]

Writer for mitk::Image. More...

#include <mitkImageWriter.h>

Inheritance diagram for mitk::ImageWriter:
Inheritance graph
[legend]
Collaboration diagram for mitk::ImageWriter:
Collaboration graph
[legend]

List of all members.

Public Types

typedef ImageWriter Self
typedef mitk::FileWriter Superclass
typedef itk::SmartPointer< SelfPointer
typedef itk::SmartPointer
< const Self
ConstPointer

Public Member Functions

virtual const char * GetClassName () const
virtual void Write ()
virtual void Update ()
virtual void SetFileName (const char *_arg)
virtual const char * GetFileName () const
virtual void SetExtension (const char *_arg)
 Explicitly set the extension to be added to the filename.
virtual const char * GetExtension () const
 Get the extension to be added to the filename.
void SetDefaultExtension ()
 Set the extension to be added to the filename to the default.
virtual void SetFilePrefix (const char *_arg)
virtual const char * GetFilePrefix () const
virtual void SetFilePattern (const char *_arg)
virtual const char * GetFilePattern () const
void SetInput (mitk::Image *input)
virtual std::vector< std::string > GetPossibleFileExtensions ()
 Return the possible file extensions for the data type associated with the writer.
virtual std::string GetFileExtension ()
 Return the extension to be added to the filename.
virtual bool CanWriteDataType (DataNode *)
 Check if the Writer can write the Content of the.
virtual std::string GetWritenMIMEType ()
 Return the MimeType of the saved File.
virtual void SetInput (DataNode *)
 Set the DataTreenode as Input. Important: The Writer always have a SetInput-Function.
const mitk::ImageGetInput ()

Static Public Member Functions

static Pointer New ()

Protected Member Functions

 ImageWriter ()
virtual ~ImageWriter ()
virtual void GenerateData ()
virtual void WriteByITK (mitk::Image *image, const std::string &fileName)

Protected Attributes

std::string m_FileName
std::string m_FilePrefix
std::string m_FilePattern
std::string m_Extension
std::string m_MimeType

Detailed Description

Writer for mitk::Image.

Uses the given extension (SetExtension) to decide the format to write (.mhd is default, .pic, .tif, .png, .jpg supported yet).

Definition at line 35 of file mitkImageWriter.h.


Member Typedef Documentation

typedef itk::SmartPointer<const Self> mitk::ImageWriter::ConstPointer

Reimplemented from mitk::FileWriter.

Definition at line 39 of file mitkImageWriter.h.

typedef itk::SmartPointer<Self> mitk::ImageWriter::Pointer

Reimplemented from mitk::FileWriter.

Definition at line 39 of file mitkImageWriter.h.

Reimplemented from mitk::FileWriter.

Definition at line 39 of file mitkImageWriter.h.

Reimplemented from mitk::FileWriter.

Definition at line 39 of file mitkImageWriter.h.


Constructor & Destructor Documentation

mitk::ImageWriter::ImageWriter (  ) [protected]

Constructor.

Definition at line 30 of file mitkImageWriter.cpp.

References m_MimeType, and SetDefaultExtension().

{
  this->SetNumberOfRequiredInputs( 1 );
  m_MimeType = "";
  SetDefaultExtension();
}
mitk::ImageWriter::~ImageWriter (  ) [protected, virtual]

Virtual destructor.

Definition at line 37 of file mitkImageWriter.cpp.

{
}

Member Function Documentation

bool mitk::ImageWriter::CanWriteDataType ( DataNode input ) [virtual]

Check if the Writer can write the Content of the.

Reimplemented from mitk::FileWriter.

Definition at line 215 of file mitkImageWriter.cpp.

References mitk::DataNode::GetData().

{
  if ( input )
  {
    mitk::BaseData* data = input->GetData();
    if ( data )
    {
       mitk::Image::Pointer image = dynamic_cast<mitk::Image*>( data );
       if( image.IsNotNull() )
       {
         //"SetDefaultExtension()" set m_Extension to ".mhd" ?????
         m_Extension = ".pic";
         return true;
       }
    }
  }
  return false;
}
void mitk::ImageWriter::GenerateData (  ) [protected, virtual]

Definition at line 121 of file mitkImageWriter.cpp.

References mitk::TimeSlicedGeometry::GetGeometry3D(), mitk::Geometry3D::GetTimeBounds(), mitk::BaseData::GetTimeSlicedGeometry(), mitk::PicFileWriter::New(), mitk::ImageTimeSelector::New(), and QuadProgPP::t().

{
  if ( m_FileName == "" )
  {
    itkWarningMacro( << "Sorry, filename has not been set!" );
    return ;
  }

  FILE* tempFile = fopen(m_FileName.c_str(),"w");
  if (tempFile==NULL)
  {
    itkExceptionMacro(<<"File location not writeable");
    return;
  }
  fclose(tempFile);
  remove(m_FileName.c_str());

  mitk::Image::Pointer input = const_cast<mitk::Image*>(this->GetInput());

#if ((VTK_MAJOR_VERSION > 4) || ((VTK_MAJOR_VERSION==4) && (VTK_MINOR_VERSION>=4) ))
  bool vti = (m_Extension.find(".vti") != std::string::npos);
#endif

  if ( m_Extension.find(".pic") == std::string::npos )
  {
    if(input->GetDimension() > 3)
    {
      int t, timesteps;

      timesteps = input->GetDimension(3);
      ImageTimeSelector::Pointer timeSelector = ImageTimeSelector::New();
      timeSelector->SetInput(input);
      mitk::Image::Pointer image = timeSelector->GetOutput();
      for(t = 0; t < timesteps; ++t)
      {
        ::itk::OStringStream filename;
        timeSelector->SetTimeNr(t);
        timeSelector->Update();
        if(input->GetTimeSlicedGeometry()->IsValidTime(t))
        {
          const mitk::TimeBounds& timebounds = input->GetTimeSlicedGeometry()->GetGeometry3D(t)->GetTimeBounds();
          filename <<  m_FileName.c_str() << "_S" << std::setprecision(0) << timebounds[0] << "_E" << std::setprecision(0) << timebounds[1] << "_T" << t << m_Extension;
        }
        else
        {
          itkWarningMacro(<<"Error on write: TimeSlicedGeometry invalid of image " << filename << ".");
          filename <<  m_FileName.c_str() << "_T" << t << m_Extension;
        }
#if ((VTK_MAJOR_VERSION > 4) || ((VTK_MAJOR_VERSION==4) && (VTK_MINOR_VERSION>=4) ))
        if ( vti )
        {
          writeVti(filename.str().c_str(), input, t);
        }
        else
#endif
        {        
          WriteByITK(input, filename.str());
        }
      }
    }
#if ((VTK_MAJOR_VERSION > 4) || ((VTK_MAJOR_VERSION==4) && (VTK_MINOR_VERSION>=4) ))
    else if ( vti )
    {
      ::itk::OStringStream filename;
      filename <<  m_FileName.c_str() << m_Extension;
      writeVti(filename.str().c_str(), input);
    }
#endif
    else
    {
      ::itk::OStringStream filename;
      filename <<  m_FileName.c_str() << m_Extension;
      WriteByITK(input, filename.str());
    }
  }
  else
  {
    PicFileWriter::Pointer picWriter = PicFileWriter::New();
    size_t found;
    found = m_FileName.find( m_Extension ); // !!! HAS to be at the very end of the filename (not somewhere in the middle)
    if( m_FileName.length() > 3 && found != m_FileName.length() - 4 )
    {
      //if Extension not in Filename
      ::itk::OStringStream filename;
      filename <<  m_FileName.c_str() << m_Extension;
      m_FileName = filename.str().c_str();
    }
    picWriter->SetFileName( m_FileName.c_str() );
    picWriter->SetInput( input );
    picWriter->Write();
  }
  m_MimeType = "application/MITK.Pic";
}
virtual const char* mitk::ImageWriter::GetClassName (  ) const [virtual]

Reimplemented from mitk::FileWriter.

virtual const char* mitk::ImageWriter::GetExtension (  ) const [virtual]

Get the extension to be added to the filename.

Returns:
the extension to be added to the filename (e.g., ".mhd").
std::string mitk::ImageWriter::GetFileExtension (  ) [virtual]

Return the extension to be added to the filename.

Reimplemented from mitk::FileWriter.

Definition at line 273 of file mitkImageWriter.cpp.

{
  return m_Extension;
}
virtual const char* mitk::ImageWriter::GetFileName (  ) const [virtual]
Returns:
the name of the file to be written to disk.

Implements mitk::FileWriter.

virtual const char* mitk::ImageWriter::GetFilePattern (  ) const [virtual]
Warning:
multiple write not (yet) supported

Implements mitk::FileWriter.

virtual const char* mitk::ImageWriter::GetFilePrefix (  ) const [virtual]
Warning:
multiple write not (yet) supported

Implements mitk::FileWriter.

const mitk::Image * mitk::ImageWriter::GetInput ( void   )
Returns:
the 0'th input object of the filter.

Definition at line 283 of file mitkImageWriter.cpp.

{
  if ( this->GetNumberOfInputs() < 1 )
  {
    return NULL;
  }
  else
  {
    return static_cast< const mitk::Image * >( this->ProcessObject::GetInput( 0 ) );
  }
}
std::vector< std::string > mitk::ImageWriter::GetPossibleFileExtensions (  ) [virtual]

Return the possible file extensions for the data type associated with the writer.

Implements mitk::FileWriter.

Definition at line 245 of file mitkImageWriter.cpp.

{
  std::vector<std::string> possibleFileExtensions;
  possibleFileExtensions.push_back(".pic");
  possibleFileExtensions.push_back(".bmp");
  possibleFileExtensions.push_back(".dcm");
  possibleFileExtensions.push_back(".DCM");
  possibleFileExtensions.push_back(".dicom");
  possibleFileExtensions.push_back(".DICOM");
  possibleFileExtensions.push_back(".gipl");
  possibleFileExtensions.push_back(".gipl.gz");
  possibleFileExtensions.push_back(".mha");
  possibleFileExtensions.push_back(".nii");
  possibleFileExtensions.push_back(".nrrd");
  possibleFileExtensions.push_back(".nhdr");
  possibleFileExtensions.push_back(".png");
  possibleFileExtensions.push_back(".PNG");
  possibleFileExtensions.push_back(".spr");
  possibleFileExtensions.push_back(".mhd");
  possibleFileExtensions.push_back(".vtk");
  possibleFileExtensions.push_back(".vti");
  possibleFileExtensions.push_back(".hdr");
  possibleFileExtensions.push_back(".png");
  possibleFileExtensions.push_back(".tif");
  possibleFileExtensions.push_back(".jpg");
  return possibleFileExtensions;
}
std::string mitk::ImageWriter::GetWritenMIMEType (  ) [virtual]

Return the MimeType of the saved File.

Reimplemented from mitk::FileWriter.

Definition at line 240 of file mitkImageWriter.cpp.

{
  return m_MimeType;
}
static Pointer mitk::ImageWriter::New (  ) [static]
void mitk::ImageWriter::SetDefaultExtension (  )

Set the extension to be added to the filename to the default.

Definition at line 41 of file mitkImageWriter.cpp.

Referenced by ImageWriter().

{
  m_Extension = ".mhd";
}
virtual void mitk::ImageWriter::SetExtension ( const char *  _arg ) [virtual]

Explicitly set the extension to be added to the filename.

Parameters:
_argto be added to the filename, including a "." (e.g., ".mhd").
virtual void mitk::ImageWriter::SetFileName ( const char *  _arg ) [virtual]

Sets the filename of the file to write.

Parameters:
_argthe name of the file to write.

Implements mitk::FileWriter.

virtual void mitk::ImageWriter::SetFilePattern ( const char *  _arg ) [virtual]
Warning:
multiple write not (yet) supported

Implements mitk::FileWriter.

virtual void mitk::ImageWriter::SetFilePrefix ( const char *  _arg ) [virtual]
Warning:
multiple write not (yet) supported

Implements mitk::FileWriter.

void mitk::ImageWriter::SetInput ( DataNode input ) [virtual]

Set the DataTreenode as Input. Important: The Writer always have a SetInput-Function.

Reimplemented from mitk::FileWriter.

Definition at line 234 of file mitkImageWriter.cpp.

References mitk::DataNode::GetData().

{
  if( input && CanWriteDataType( input ) )
    this->ProcessObject::SetNthInput( 0, dynamic_cast<mitk::Image*>( input->GetData() ) );
}
void mitk::ImageWriter::SetInput ( mitk::Image input )

Sets the 0'th input object for the filter.

Parameters:
inputthe first input for the filter.

Definition at line 278 of file mitkImageWriter.cpp.

{
  this->ProcessObject::SetNthInput( 0, image );
}
virtual void mitk::ImageWriter::Update (  ) [inline, virtual]

Definition at line 43 of file mitkImageWriter.h.

virtual void mitk::ImageWriter::Write (  ) [inline, virtual]

Implements mitk::FileWriter.

Definition at line 43 of file mitkImageWriter.h.

void mitk::ImageWriter::WriteByITK ( mitk::Image image,
const std::string &  fileName 
) [protected, virtual]

Definition at line 60 of file mitkImageWriter.cpp.

References _mitkItkPictureWrite(), AccessByItk_1, mitk::Geometry3D::GetAxisVector(), mitk::Image::GetData(), mitk::Image::GetDimension(), mitk::Image::GetDimensions(), mitk::BaseData::GetGeometry(), mitk::PixelType::GetItkTypeId(), mitk::SlicedData::GetLargestPossibleRegion(), mitk::PixelType::GetNumberOfComponents(), mitk::Geometry3D::GetOrigin(), mitk::Image::GetPixelType(), and mitk::Geometry3D::GetSpacing().

{
  // Pictures and picture series like .png are written via a different mechanism then volume images.
  // So, they are still multiplexed and thus not support vector images.
  if (fileName.find(".png") != std::string::npos || fileName.find(".tif") != std::string::npos || fileName.find(".jpg") != std::string::npos)
  {
    AccessByItk_1( image, _mitkItkPictureWrite, fileName );
    return;
  }

  // Implementation of writer using itkImageIO directly. This skips the use
  // of templated itkImageFileWriter, which saves the multiplexing on MITK side.

  unsigned int dimension = image->GetDimension();
  unsigned int* dimensions = image->GetDimensions();
  mitk::PixelType pixelType = image->GetPixelType();
  mitk::Vector3D spacing = image->GetGeometry()->GetSpacing();
  mitk::Point3D origin = image->GetGeometry()->GetOrigin();

  itk::ImageIOBase::Pointer imageIO = itk::ImageIOFactory::CreateImageIO( fileName.c_str(), 
    itk::ImageIOFactory::WriteMode );

  if(imageIO.IsNull())
  {
    itkExceptionMacro(<< "Error: Could not create itkImageIO via factory for file " << fileName);
  }

  // Set the necessary information for imageIO
  imageIO->SetNumberOfDimensions(dimension);
  imageIO->SetPixelTypeInfo( *(pixelType.GetItkTypeId()) );

  if(pixelType.GetNumberOfComponents() > 1)
    imageIO->SetNumberOfComponents(pixelType.GetNumberOfComponents());

  itk::ImageIORegion ioRegion( dimension );

  for(unsigned int i=0; i<dimension; i++)
  {
    imageIO->SetDimensions(i,dimensions[i]);
    imageIO->SetSpacing(i,spacing[i]);
    imageIO->SetOrigin(i,origin[i]);

    mitk::Vector3D direction = image->GetGeometry()->GetAxisVector(i);
    vnl_vector< double > axisDirection(dimension);
    for(unsigned int j=0; j<dimension; j++)
    {
      axisDirection[j] = direction[j];
    }
    imageIO->SetDirection( i, axisDirection );

    ioRegion.SetSize(i, image->GetLargestPossibleRegion().GetSize(i) );
    ioRegion.SetIndex(i, image->GetLargestPossibleRegion().GetIndex(i) );
  }

  imageIO->SetIORegion(ioRegion);
  imageIO->SetFileName(fileName);

  const void * data = image->GetData();
  imageIO->Write(data);
}

Member Data Documentation

std::string mitk::ImageWriter::m_Extension [protected]

Definition at line 152 of file mitkImageWriter.h.

std::string mitk::ImageWriter::m_FileName [protected]

Definition at line 146 of file mitkImageWriter.h.

std::string mitk::ImageWriter::m_FilePattern [protected]

Definition at line 150 of file mitkImageWriter.h.

std::string mitk::ImageWriter::m_FilePrefix [protected]

Definition at line 148 of file mitkImageWriter.h.

std::string mitk::ImageWriter::m_MimeType [protected]

Definition at line 154 of file mitkImageWriter.h.

Referenced by ImageWriter().


The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines