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().
1.7.2