1 /*
2  * Medical Image Registration ToolKit (MIRTK)
3  *
4  * Copyright 2008-2015 Imperial College London
5  * Copyright 2008-2015 Daniel Rueckert, Julia Schnabel
6  *
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  *     http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  */
19 
20 #ifndef MIRTK_ImageWriter_H
21 #define MIRTK_ImageWriter_H
22 
23 #include "mirtk/Cofstream.h"
24 #include "mirtk/BaseImage.h"
25 
26 
27 namespace mirtk {
28 
29 
30 /**
31  * Abstract base class for any general image to file filter.
32  *
33  * This is the abstract base class which defines a common interface for all
34  * filters which take an image as input and produce an image file as output.
35  * Each derived class has to implement all of the abstract member functions.
36  */
37 class ImageWriter : protected Cofstream
38 {
39   mirtkAbstractMacro(ImageWriter);
40 
41   // ---------------------------------------------------------------------------
42   // Attributes
43 
44   /// Input image
45   mirtkPublicAggregateMacro(const BaseImage, Input);
46 
47   /// Output file name
48   mirtkPublicAttributeMacro(string, FileName);
49 
50 protected:
51 
52   /// Start address of the data in the image file.
53   /// Should be initialized by overridden Initialize() function.
54   int _Start;
55 
56   /// Flag whether to reflect X axis
57   int _ReflectX;
58 
59   /// Flag whether to reflect Y axis
60   int _ReflectY;
61 
62   /// Flag whether to reflect Z axis
63   int _ReflectZ;
64 
65   // ---------------------------------------------------------------------------
66   // Construction/Destruction
67 
68   /// Constructor
69   ImageWriter();
70 
71 public:
72 
73   /// Destructor
74   virtual ~ImageWriter();
75 
76   /// Static constructor. This constructor allocates a derived class which
77   /// can be used to write the image file in a format corresponding to the
78   /// given file name extension.
79   static ImageWriter *New(const char *);
80 
81   // ---------------------------------------------------------------------------
82   // Execution
83 
84   /// Write image
85   virtual void Run();
86 
87 protected:
88 
89   /// Initialize filter
90   virtual void Initialize();
91 
92   /// Finalize filter
93   virtual void Finalize();
94 
95 };
96 
97 
98 } // namespace mirtk
99 
100 #endif // MIRTK_ImageWriter_H
101