1 #ifndef VARIABLE_BANDS_IMAGE_POLICY_HXX
2 #define VARIABLE_BANDS_IMAGE_POLICY_HXX
3 
4 #include "vigra/imagehierarchy.hxx"
5 #include <unittest.hxx>
6 
7 /**An das template wird eine Policy-Klasse der Bilder der Imagehierarchie uebergeben
8 *  die moeglichen sind: ImagePolicy<GrayImage>, RGBImagePolicy<RGBImage>,
9 *  Vector2ImagePolicy<Vector2Image>, Vector3ImagePolicy<Vector3Image>, Vector4ImagePolicy<Vector4Image>.
10 */
11 template<class IMAGEPOLICY>
12 class VariableBandsImagePolicy
13 {
14 
15 /** Bei dem Image (in diesem Fall VariableBandsImage) handelt es sich um die zu testende Klasse
16 *  dagegen ChildImage ist die abgeleitete Klasse von Image, z.B. GrayImage oder FixedRGBImage.
17 *  Die VariableBandsImage-Konstruktoren sind protected und somit nicht aufrufbar. Um die Klasse zu testen,
18 *  muessen wir die Konstruktoren der abgeleiteten Klassen benutzen. Somit werden alle zur Verfuegung
19 *  stehende Funktionen getestet.
20 *  In der Testklasse werden die ChildImage Konstruktoren aufgerufen, aber an einem Objekt
21 *  der VariableBandsImage Klasse (Polymorphie).
22 */
23 
24 public:
25     typedef typename IMAGEPOLICY::Image                 ChildImage;             // abgeleitete Klasse der ImageKlasse, es kann sich hierbei um GrayImage, SelectBandImage, SingleBandImage, FixedRGBImage oder beliebiges FixedBandImage (Vector2Image, Vector3Image usw.) handeln
26     typedef vigra::VariableBandsImage                   Image;                  // VariableBandsImage
27     typedef vigra::VariableBandsImage::PixelType        PixelType;              // VektorProxy
28     typedef typename ChildImage::value_type             value_type;             //
29     typedef typename ChildImage::value_type             child_value_type;
30     typedef std::vector<value_type>                     data_array_type;
31     typedef std::vector<value_type>                     child_data_array_type;
32 
getData()33     static  data_array_type getData()
34     {
35         return IMAGEPOLICY::getData();
36     }
37 
getChildData()38     static  child_data_array_type getChildData()
39     {
40         return IMAGEPOLICY::getChildData();
41     }
42 
factory()43     static ChildImage * factory()
44     {
45         return new ChildImage();
46     }
47 
factory(int x,int y)48     static ChildImage * factory(int x, int y)
49     {
50         return new ChildImage(x,y);
51     }
52 
factory(vigra::Diff2D size)53     static ChildImage * factory(vigra::Diff2D size)
54     {
55         return new ChildImage(size);
56     }
57 
factory(int x,int y,value_type pixel)58     static ChildImage * factory(int x, int y, value_type pixel)
59     {
60         return new ChildImage(x, y, pixel);
61     }
62 
factory(ChildImage image)63     static ChildImage * factory(ChildImage image)
64     {
65         return new ChildImage(image);
66     }
67 
factory(typename ChildImage::InnerImage image)68     static ChildImage * factory(typename ChildImage::InnerImage image)
69     {
70         return new ChildImage(image);
71     }
72 
73 };
74 
75 struct VariableImagesTestSuite
76 : public vigra::test_suite
77 {
78     VariableImagesTestSuite();
79 };
80 
81 #endif // VARIABLE_BANDS_IMAGE_POLICY_HXX
82