Writer for mitk::Image. More...
#include <mitkImageWriter.h>
Public Types | |
typedef ImageWriter | Self |
typedef mitk::FileWriter | Superclass |
typedef itk::SmartPointer< Self > | Pointer |
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::Image * | GetInput () |
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 |
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.
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.
typedef ImageWriter mitk::ImageWriter::Self |
Reimplemented from mitk::FileWriter.
Definition at line 39 of file mitkImageWriter.h.
Reimplemented from mitk::FileWriter.
Definition at line 39 of file mitkImageWriter.h.
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] |
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.
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] |
Implements mitk::FileWriter.
virtual const char* mitk::ImageWriter::GetFilePattern | ( | ) | const [virtual] |
Implements mitk::FileWriter.
virtual const char* mitk::ImageWriter::GetFilePrefix | ( | ) | const [virtual] |
Implements mitk::FileWriter.
const mitk::Image * mitk::ImageWriter::GetInput | ( | void | ) |
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.
_arg | to 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.
_arg | the name of the file to write. |
Implements mitk::FileWriter.
virtual void mitk::ImageWriter::SetFilePattern | ( | const char * | _arg ) | [virtual] |
Implements mitk::FileWriter.
virtual void mitk::ImageWriter::SetFilePrefix | ( | const char * | _arg ) | [virtual] |
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.
input | the 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); }
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().