Rev Author Line No. Line
178 kaklik 1 #ifndef IMAGE_INPUT_H
2 #define IMAGE_INPUT_H
3  
4 #include "mimasexception.h"
5 #include "image.h"
6  
7 namespace mimas {
8  
9 /** @defgroup imageIO Image I/O
10 The I/O-facilities for images of mimas are implemented using inheritance.
11 This makes it possible to write programs, where the input-source and the
12 output-target for an image (or several images) are exchangable.
13 @{ */
14 /** @defgroup imageInput Image Input
15 This group contains classes for retrieving image(s) from different input
16 sources.
17 @{ */
18 /** Abstract base-class for input sources.
19 This is a base-class for input sources. It allows to implement a program,
20 which retrieves an image from an arbitrary input-source. E.g.:
21 \code
22 using namespace mimas;
23 ...
24 void test( image_input< rgba< unsigned char > > &source ) {
25 image< rgba< unsigned char > > image;
26 if ( source >> image ) {
27 ...
28 } else {
29 // End of input has been reached.
30 }
31 ...
32 };
33 ...
34 \endcode */
35 template< typename T >
36 class image_input: public object
37 {
38 public:
39 /** Constructor.
40 The state is set to valid (end of stream not encountered yet). */
41 image_input(void): state( true ) {}
42 /** Read image from arbitrary source.
43 This function is virtual and has to be implemented by the inheriting
44 class.
45 @param img Object to store image in. */
46 virtual void read( image< T > &img ) throw (mimasexception) = 0;
47 /// Indicator for input-source being alive.
48 operator bool(void) const { return state; }
49 /// Indicator for end of input-source.
50 bool operator!(void) const { return !state; }
51 protected:
52 /// State variable.
53 bool state;
54 };
55  
56 /// Stream-operator for arbitrary input-source.
57 template< typename T >
58 inline image_input< T > &operator>>( image_input< T > &input,
59 image< T > &img )
60 { input.read( img ); return input; }
61  
62 ///@}
63  
64 ///@}
65  
66 };
67  
68 #endif