1 #include <plugins/IO/ImageWriter.h>
2 #include <plugins/IO/ImageWriterQDialog.h>
3 #include <cpPlugins/Image.h>
4 #include <cpPlugins_Instances_ImageWriters.h>
8 #include <QApplication>
11 // -------------------------------------------------------------------------
12 cpPluginsIO::ImageWriterQDialog::
13 ImageWriterQDialog( QWidget* parent )
14 : QFileDialog( parent ),
15 m_ProcessObject( NULL )
18 this, SIGNAL( accepted( ) ), this, SLOT( _dlg_Accepted( ) )
20 this->setWindowTitle( "Save an image" );
23 // -------------------------------------------------------------------------
24 cpPluginsIO::ImageWriterQDialog::
25 ~ImageWriterQDialog( )
29 // -------------------------------------------------------------------------
30 void cpPluginsIO::ImageWriterQDialog::
31 setProcessObject( cpPlugins::ProcessObject* obj )
35 this->m_ProcessObject = obj;
36 auto parameters = this->m_ProcessObject->GetParameters( );
37 auto extensions = parameters->GetAcceptedFileExtensions( "FileName" );
38 auto filename = parameters->GetSaveFileName( "FileName" );
41 if( extensions != "" )
42 filters << extensions.c_str( );
43 filters << "Any file (*)";
44 this->setFileMode( QFileDialog::AnyFile );
45 this->setNameFilters( filters );
46 this->setAcceptMode( QFileDialog::AcceptSave );
49 QFileInfo info( filename.c_str( ) );
51 this->setDirectory( info.canonicalPath( ) );
53 this->setDirectory( "." );
56 this->setDirectory( "." );
59 // -------------------------------------------------------------------------
60 void cpPluginsIO::ImageWriterQDialog::
63 if( this->m_ProcessObject != NULL )
65 auto param = this->m_ProcessObject->GetParameters( );
66 auto files = this->selectedFiles( );
67 if( files.size( ) > 0 )
68 param->SetSaveFileName( "FileName", files.begin( )->toStdString( ) );
73 #endif // cpPlugins_QT4
75 // -------------------------------------------------------------------------
76 QDialog* cpPluginsIO::ImageWriter::
80 ImageWriterQDialog* dlg = NULL;
81 if( QApplication::instance( ) != NULL )
83 dlg = new ImageWriterQDialog( );
84 dlg->setProcessObject( this );
88 #else // cpPlugins_QT4
90 #endif // cpPlugins_QT4
93 // -------------------------------------------------------------------------
94 cpPluginsIO::ImageWriter::
98 this->_AddInput( "Input" );
99 this->m_Parameters.Clear( );
100 this->m_Parameters.ConfigureAsSaveFileName( "FileName" );
101 this->m_Parameters.SetAcceptedFileExtensions(
103 "Image files (*.bmp *.png *.jpg *.jpeg *.dcm *.mhd *.nhdr *.nrrd *.tiff)"
107 // -------------------------------------------------------------------------
108 cpPluginsIO::ImageWriter::
113 // -------------------------------------------------------------------------
114 void cpPluginsIO::ImageWriter::
117 auto image = this->GetInputData( "Input" );
118 cpPlugins_Image_Demangle_Dim( _GD0, image, 1 );
119 else cpPlugins_Image_Demangle_Dim( _GD0, image, 2 );
120 else cpPlugins_Image_Demangle_Dim( _GD0, image, 3 );
121 else cpPlugins_Image_Demangle_Dim( _GD0, image, 4 );
123 this->_Error( "Invalid input itk::ImageBase" );
126 // -------------------------------------------------------------------------
127 template< class _TImage >
128 void cpPluginsIO::ImageWriter::
129 _GD0( _TImage* image )
131 static const unsigned int D = _TImage::ImageDimension;
132 cpPlugins_Image_Demangle_Pixel_AllScalars ( _GD1, image, D );
133 else cpPlugins_Image_Demangle_ColorPixel_AllScalars( _GD1, image, RGB, D );
134 else cpPlugins_Image_Demangle_ColorPixel_AllScalars( _GD1, image, RGBA, D );
136 this->_Error( "Invalid pixel type" );
139 // -------------------------------------------------------------------------
140 template< class _TImage >
141 void cpPluginsIO::ImageWriter::
142 _GD1( _TImage* image )
144 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( ) );