00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef IMG_ALG_TRANSFORM_MIRROR_HH
00022 #define IMG_ALG_TRANSFORM_MIRROR_HH
00023
00024 #include <ost/img/image_state.hh>
00025 #include <ost/img/value_util.hh>
00026 #include <ost/img/alg/module_config.hh>
00027 namespace ost { namespace img { namespace alg {
00028
00029 struct DLLEXPORT_IMG_ALG MirrorFnc {
00030 MirrorFnc(): planes_(0) {}
00031 MirrorFnc(int p): planes_(p) {}
00032
00033
00034 template <typename T, class D>
00035 ImageStateBasePtr VisitState(const ImageStateImpl<T,D>& in_state) const {
00036 boost::shared_ptr<ImageStateImpl<T,D> > out_state(new ImageStateImpl<T,D>(in_state.GetExtent().Mirror(this->planes_),in_state.GetSampling()));
00037
00038 for(ExtentIterator it(in_state.GetExtent()); !it.AtEnd(); ++it) {
00039 Point p(it);
00040 out_state->Value(p.Mirror(this->planes_))=in_state.Value(p);
00041 }
00042
00043 return out_state;
00044 }
00045
00046 static String GetAlgorithmName() {return "Mirror";}
00047 private:
00048 int planes_;
00049 };
00050
00051 typedef ImageStateConstModOPAlgorithm<MirrorFnc> Mirror;
00052
00053 }}}
00054
00055
00056
00057 #endif