1 #include <IO/ImageWriter.h>
2 #include <IO/ImageWriterQDialog.h>
3 #include <cpPlugins/DataObjects/Image.h>
4 #include <cpPlugins/DataObjects/Image_Demanglers.h>
5 #include <cpInstances_SimpleImages.h>
7 #include <itkImageFileWriter.h>
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_Image_ProcessDims( o, _GD0, )
122 cpPlugins_Demangle_Image_DiffTensors3D( o, _GD1, )
123 this->_Error( "Invalid input image dimension." );
126 // -------------------------------------------------------------------------
127 template< class _TImage >
128 void cpPluginsIO::ImageWriter::
129 _GD0( _TImage* image )
131 cpPlugins_Demangle_Image_ScalarPixels( image, _GD1, _TImage::ImageDimension, )
132 cpPlugins_Demangle_Image_ComplexPixels( image, _GD1, _TImage::ImageDimension, )
133 cpPlugins_Demangle_Image_ColorPixels( image, _GD1, _TImage::ImageDimension, )
134 cpPlugins_Demangle_Image_VectorPixels( image, _GD1, _TImage::ImageDimension, )
135 this->_Error( "Invalid input image pixel type." );
138 // -------------------------------------------------------------------------
139 template< class _TImage >
140 void cpPluginsIO::ImageWriter::
141 _GD1( _TImage* image )
143 typedef itk::ImageFileWriter< _TImage > _TFilter;
145 auto f = this->_CreateITK< _TFilter >( );
146 f->SetFileName( this->m_Parameters.GetSaveFileName( "FileName" ) );
147 f->SetInput( image );
152 catch( itk::ExceptionObject& err )
154 this->_Error( err.GetDescription( ) );