27 #ifndef MLN_UPSCALING_ART_SCALE2X_HH
28 # define MLN_UPSCALING_ART_SCALE2X_HH
35 # include <mln/core/concept/box.hh>
36 # include <mln/core/concept/image.hh>
37 # include <mln/core/alias/neighb2d.hh>
38 # include <mln/core/alias/dpoint2d.hh>
40 # include <mln/extension/adjust_duplicate.hh>
69 # ifndef MLN_INCLUDE_ONLY
76 mln_trace(
"mln::upscaling::art::scale2x");
78 const I& input =
exact(input_);
79 mln_precondition(input.is_valid());
80 mlc_is_a(mln_domain(I),
Box)::check();
84 mln_domain(I) ext_domain(input.domain().pmin() * 2,
85 input.domain().pmax() * 2
88 mln_concrete(I) output(ext_domain);
90 mln_piter(I)
p(input.domain());
105 if (input(pC) == input(pA)
106 && input(pC) != input(pD)
107 && input(pA) != input(pB))
108 output(pOut) = input(pA);
110 output(pOut) = input(
p);
113 if (input(pA) == input(pB)
114 && input(pA) != input(pC)
115 && input(pB) != input(pD))
116 output(pOut + mln::right) = input(pB);
118 output(pOut + mln::right) = input(
p);
121 if (input(pD) == input(pC)
122 && input(pD) != input(pB)
123 && input(pC) != input(pA))
124 output(pOut + mln::down) = input(pC);
126 output(pOut + mln::down) = input(
p);
129 if (input(pB) == input(pD)
130 && input(pB) != input(pA)
131 && input(pD) != input(pC))
142 # endif // ! MLN_INCLUDE_ONLY
152 #endif // ! MLN_UPSCALING_ART_SCALE2X_HH