]> Creatis software - cpPlugins.git/blob - plugins/IO/ImageWriter.cxx
...
[cpPlugins.git] / plugins / IO / ImageWriter.cxx
1 #include <plugins/IO/ImageWriter.h>
2 #include <plugins/IO/ImageWriterQDialog.h>
3 #include <cpPlugins/Image.h>
4 #include <cpPlugins_Instances_ImageWriters.h>
5
6 #ifdef cpPlugins_QT4
7
8 #include <QApplication>
9 #include <QFileInfo>
10
11 // -------------------------------------------------------------------------
12 cpPluginsIO::ImageWriterQDialog::
13 ImageWriterQDialog( QWidget* parent )
14   : QFileDialog( parent ),
15     m_ProcessObject( NULL )
16 {
17   this->connect(
18     this, SIGNAL( accepted( ) ), this, SLOT( _dlg_Accepted( ) )
19     );
20   this->setWindowTitle( "Save an image" );
21 }
22
23 // -------------------------------------------------------------------------
24 cpPluginsIO::ImageWriterQDialog::
25 ~ImageWriterQDialog( )
26 {
27 }
28
29 // -------------------------------------------------------------------------
30 void cpPluginsIO::ImageWriterQDialog::
31 setProcessObject( cpPlugins::ProcessObject* obj )
32 {
33   if( obj == NULL )
34     return;
35   this->m_ProcessObject = obj;
36   auto parameters = this->m_ProcessObject->GetParameters( );
37   auto extensions = parameters->GetAcceptedFileExtensions( "FileName" );
38   auto filename = parameters->GetSaveFileName( "FileName" );
39
40   QStringList filters;
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 );
47   if( filename != "" )
48   {
49     QFileInfo info( filename.c_str( ) );
50     if( info.exists( ) )
51       this->setDirectory( info.canonicalPath( ) );
52     else
53       this->setDirectory( "." );
54   }
55   else
56     this->setDirectory( "." );
57 }
58
59 // -------------------------------------------------------------------------
60 void cpPluginsIO::ImageWriterQDialog::
61 _dlg_Accepted( )
62 {
63   if( this->m_ProcessObject != NULL )
64   {
65     auto param = this->m_ProcessObject->GetParameters( );
66     auto files = this->selectedFiles( );
67     if( files.size( ) > 0 )
68       param->SetSaveFileName( "FileName", files.begin( )->toStdString( ) );
69
70   } // fi
71 }
72
73 #endif // cpPlugins_QT4
74
75 // -------------------------------------------------------------------------
76 QDialog* cpPluginsIO::ImageWriter::
77 CreateQDialog( )
78 {
79 #ifdef cpPlugins_QT4
80   ImageWriterQDialog* dlg = NULL;
81   if( QApplication::instance( ) != NULL )
82   {
83     dlg = new ImageWriterQDialog( );
84     dlg->setProcessObject( this );
85
86   } // fi
87   return( dlg );
88 #else // cpPlugins_QT4
89   return( NULL );
90 #endif // cpPlugins_QT4
91 }
92
93 // -------------------------------------------------------------------------
94 cpPluginsIO::ImageWriter::
95 ImageWriter( )
96   : Superclass( )
97 {
98   this->_AddInput( "Input" );
99   this->m_Parameters.Clear( );
100   this->m_Parameters.ConfigureAsSaveFileName( "FileName" );
101   this->m_Parameters.SetAcceptedFileExtensions(
102     "FileName",
103     "Image files (*.bmp *.png *.jpg *.jpeg *.dcm *.mhd *.nhdr *.nrrd *.tiff)"
104     );
105 }
106
107 // -------------------------------------------------------------------------
108 cpPluginsIO::ImageWriter::
109 ~ImageWriter( )
110 {
111 }
112
113 // -------------------------------------------------------------------------
114 void cpPluginsIO::ImageWriter::
115 _GenerateData( )
116 {
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 );
122   else
123     this->_Error( "Invalid input itk::ImageBase" );
124 }
125
126 // -------------------------------------------------------------------------
127 template< class _TImage >
128 void cpPluginsIO::ImageWriter::
129 _GD0( _TImage* image )
130 {
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 );
135   else
136     this->_Error( "Invalid pixel type" );
137 }
138
139 // -------------------------------------------------------------------------
140 template< class _TImage >
141 void cpPluginsIO::ImageWriter::
142 _GD1( _TImage* image )
143 {
144   typedef itk::ImageFileWriter< _TImage > _TFilter;
145   auto f = this->_CreateITK< _TFilter >( );
146   f->SetFileName( this->m_Parameters.GetSaveFileName( "FileName" ) );
147   f->SetInput( image );
148   try
149   {
150     f->Update( );
151   }
152   catch( itk::ExceptionObject& err )
153   {
154     this->_Error( err.GetDescription( ) );
155
156   } // yrt
157 }
158
159 // eof - $RCSfile$