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