1 #include <plugins/IO/ImageWriter.h>
2 #include <plugins/IO/ImageWriterQDialog.h>
3 #include <cpPlugins/DataObjects/Image.h>
5 #include <itkImageFileWriter.h>
7 #include <itkImageFileWriter.hxx>
11 #include <QApplication>
14 // -------------------------------------------------------------------------
15 cpPluginsIO::ImageWriterQDialog::
16 ImageWriterQDialog( QWidget* parent )
17 : QFileDialog( parent ),
18 m_ProcessObject( NULL )
21 this, SIGNAL( accepted( ) ), this, SLOT( _dlg_Accepted( ) )
23 this->setWindowTitle( "Save an image" );
26 // -------------------------------------------------------------------------
27 cpPluginsIO::ImageWriterQDialog::
28 ~ImageWriterQDialog( )
32 // -------------------------------------------------------------------------
33 void cpPluginsIO::ImageWriterQDialog::
34 setProcessObject( cpPlugins::BaseObjects::ProcessObject* obj )
38 this->m_ProcessObject = obj;
39 auto parameters = this->m_ProcessObject->GetParameters( );
40 auto extensions = parameters->GetAcceptedFileExtensions( "FileName" );
41 auto filename = parameters->GetSaveFileName( "FileName" );
44 if( extensions != "" )
45 filters << extensions.c_str( );
46 filters << "Any file (*)";
47 this->setFileMode( QFileDialog::AnyFile );
48 this->setNameFilters( filters );
49 this->setAcceptMode( QFileDialog::AcceptSave );
52 QFileInfo info( filename.c_str( ) );
54 this->setDirectory( info.canonicalPath( ) );
56 this->setDirectory( "." );
59 this->setDirectory( "." );
62 // -------------------------------------------------------------------------
63 void cpPluginsIO::ImageWriterQDialog::
66 if( this->m_ProcessObject != NULL )
68 auto param = this->m_ProcessObject->GetParameters( );
69 auto files = this->selectedFiles( );
70 if( files.size( ) > 0 )
71 param->SetSaveFileName( "FileName", files.begin( )->toStdString( ) );
76 #endif // cpPlugins_QT4
78 // -------------------------------------------------------------------------
79 QDialog* cpPluginsIO::ImageWriter::
83 ImageWriterQDialog* dlg = NULL;
84 if( QApplication::instance( ) != NULL )
86 dlg = new ImageWriterQDialog( );
87 dlg->setProcessObject( this );
91 #else // cpPlugins_QT4
93 #endif // cpPlugins_QT4
96 // -------------------------------------------------------------------------
97 cpPluginsIO::ImageWriter::
101 this->_ConfigureInput< cpPlugins::DataObjects::Image >( "Input", true, false );
102 this->m_Parameters.Clear( );
103 this->m_Parameters.ConfigureAsSaveFileName( "FileName" );
104 this->m_Parameters.SetAcceptedFileExtensions(
106 "Image files (*.bmp *.png *.jpg *.jpeg *.dcm *.mhd *.nhdr *.nrrd *.tiff)"
110 // -------------------------------------------------------------------------
111 cpPluginsIO::ImageWriter::
116 // -------------------------------------------------------------------------
117 void cpPluginsIO::ImageWriter::
120 auto o = this->GetInputData( "Input" );
121 cpPlugins_Demangle_ImageScalars_Dims( o, _GD0 );
122 else this->_Error( "Invalid input image." );
125 // -------------------------------------------------------------------------
126 template< class _TImage >
127 void cpPluginsIO::ImageWriter::
128 _GD0( _TImage* image )
130 typedef itk::ImageFileWriter< _TImage > _TFilter;
132 auto f = this->_CreateITK< _TFilter >( );
133 f->SetFileName( this->m_Parameters.GetSaveFileName( "FileName" ) );
134 f->SetInput( image );
139 catch( itk::ExceptionObject& err )
141 this->_Error( err.GetDescription( ) );