1 #ifndef SINGLE_BAND_IMAGE_POLICY_HXX 2 #define SINGLE_BAND_IMAGE_POLICY_HXX 3 4 #include "vigra/imagehierarchy.hxx" 5 #include <unittest.hxx> 6 7 template<class IMAGEPOLICY> // Bei der IMAGEPOLICY handelt es sich bis jetzt nur um GrayImage, spaeter soll SelectBandImage folgen 8 class SingleBandImagePolicy 9 { 10 11 /* Bei dem Image (in diesem Fall VariableBandsImage) handelt es sich um die zu testende Klasse 12 * dagegen ChildImage ist die abgeleitete Klasse von Image, z.B. GrayImage oder SelectBandImage. 13 * Die VariableBandsImage-Konstruktoren sind protected und somit nicht aufrufbar. Um dei Klasse zu testen, 14 * muessen wir die Konstruktoren der abgeleiteten Klassen benutzen. Somit werden alle zur Verfuegung 15 * stehende Funktionen getestet. 16 * In der Testklasse werden die ChildImage Konstruktoren aufgerufen, aber an einem Objekt 17 * der Image Klasse (Polymorphie). 18 */ 19 20 public: 21 typedef typename IMAGEPOLICY::Image ChildImage; // abgeleitete Klasse der ImageKlasse. Es kann sich hierbei um GrayImage oder SelectBandImage handeln 22 typedef vigra::SingleBandImage Image; // entspricht dem SingleBandImage 23 typedef vigra::SingleBandImage::PixelType PixelType; // --||-- GrayValue (float) 24 typedef typename ChildImage::value_type value_type; // --||-- GrayValue (float) 25 typedef typename ChildImage::value_type child_value_type; // --||-- GrayValue (float) 26 typedef std::vector<value_type> data_array_type; // Vektor von GrayValues (float) 27 typedef std::vector<value_type> child_data_array_type; // Vektor von GrayValues (float) 28 getData()29 static data_array_type getData() 30 { 31 return IMAGEPOLICY::getData(); 32 } 33 getChildData()34 static child_data_array_type getChildData() 35 { 36 return IMAGEPOLICY::getChildData(); 37 } 38 factory()39 static ChildImage * factory() 40 { 41 return new ChildImage(); 42 } 43 factory(int x,int y)44 static ChildImage * factory(int x, int y) 45 { 46 return new ChildImage(x,y); 47 } 48 factory(vigra::Diff2D size)49 static ChildImage * factory(vigra::Diff2D size) 50 { 51 return new ChildImage(size); 52 } 53 factory(int x,int y,value_type pixel)54 static ChildImage * factory(int x, int y, value_type pixel) 55 { 56 return new ChildImage(x, y, pixel); 57 } 58 factory(ChildImage image)59 static ChildImage * factory(ChildImage image) 60 { 61 return new ChildImage(image); 62 } 63 factory(typename ChildImage::InnerImage image)64 static ChildImage * factory(typename ChildImage::InnerImage image) 65 { 66 return new ChildImage(image); 67 } 68 }; 69 70 struct SingleImageTestSuite 71 : public vigra::test_suite 72 { 73 SingleImageTestSuite(); 74 }; 75 76 #endif // SINGLE_BAND_IMAGE_POLICY_HXX 77