27 #ifndef SCRIBO_DEBUG_HIGHLIGHT_TEXT_AREA_HH
28 # define SCRIBO_DEBUG_HIGHLIGHT_TEXT_AREA_HH
34 # include <mln/core/concept/image.hh>
35 # include <mln/core/concept/function.hh>
37 # include <mln/draw/box.hh>
39 # include <mln/data/fill.hh>
40 # include <mln/data/transform.hh>
42 # include <mln/literal/colors.hh>
44 # include <mln/value/rgb8.hh>
46 # include <scribo/core/component_set.hh>
47 # include <scribo/core/line_set.hh>
49 # include <mln/geom/rotate.hh>
71 const mln::util::array<
box<mln_site(I)> >&
bbox);
83 template <typename I, typename L>
84 mln_ch_value(I,
value::rgb8)
86 const line_set<L>& lines);
100 template <typename I, typename L>
101 mln_ch_value(I,
value::rgb8)
106 # ifndef MLN_INCLUDE_ONLY
111 template <
typename M,
typename R>
114 private mlc_is(mln_value(M), bool)
::check_t
119 : mask_(
exact(mask)), p_(mask_)
124 result operator()(
const result& v)
const
136 mutable mln_pixter(M) p_;
143 template <typename I>
144 mln_ch_value(I,
value::rgb8)
146 const mln::util::array<
box<mln_site(I)> >& bbox)
148 mln_trace(
"scribo::debug::highlight_text_area");
150 const I& input =
exact(input_);
152 mln_precondition(input.is_valid());
153 mlc_is(mln_value(I), value::rgb8)::check();
157 initialize(mask, input);
160 for_all_elements(i, bbox)
161 data::
fill((mask | bbox(i)).rw(), true);
163 internal::mask_non_text<mask_t, mln_value(I)> f(mask);
166 for_all_elements(i, bbox)
167 mln::draw::
box(output, bbox(i), literal::red);
173 template <typename I, typename L>
174 mln_ch_value(I,
value::rgb8)
176 const line_set<L>& lines)
178 mln_trace(
"scribo::debug::highlight_text_area");
180 const I& input =
exact(input_);
182 mln_precondition(input.is_valid());
183 mlc_is(mln_value(I), value::rgb8)::check();
187 initialize(mask, input);
190 for_all_lines(i, lines)
192 if (! lines(i).is_valid()
193 || lines(i).tag() != line::None
194 || lines(i).type() != line::Text)
200 internal::mask_non_text<mask_t, mln_value(I)> f(mask);
203 for_all_lines(i, lines)
205 if (! lines(i).is_valid()
206 || lines(i).tag() != line::None
207 || lines(i).type() != line::Text)
217 template <
typename I,
typename L>
220 const scribo::component_set<L>& components)
222 mln_trace(
"scribo::debug::highlight_text_area");
224 const I& input =
exact(input_);
226 mln_precondition(input.is_valid());
227 mlc_is(mln_value(I), value::rgb8)::check();
231 initialize(mask, input);
234 for_all_comps(i, components)
235 if (components(i).is_valid())
236 data::
fill((mask | components(i).bbox()).rw(), true);
238 internal::mask_non_text<mask_t, mln_value(I)> f(mask);
241 for_all_comps(i, components)
242 if (components(i).is_valid())
243 mln::draw::
box(output, components(i).bbox(), literal::red);
249 template <typename I, typename L>
250 mln_ch_value(I,
value::rgb8)
251 highlight_text_area_rotated(const
Image<I>& input_,
252 const scribo::component_set<L>& components,
253 double angle,
box2d rb)
255 mln_trace(
"scribo::debug::highlight_text_area");
257 const I& input =
exact(input_);
259 mln_precondition(input.is_valid());
260 mlc_is(mln_value(I), value::rgb8)::check();
264 initialize(mask, input);
267 mln::util::array<mln_box(I)> bbox(
value::next(components.nelements()));
269 for_all_comps(i, components)
270 if (components(i).is_valid())
273 bbox(i).
pmin().row() += rb.pmin().row();
274 bbox(i).
pmin().col() += rb.pmin().col();
275 bbox(i).
pmax().row() += rb.pmin().row();
276 bbox(i).
pmax().col() += rb.pmin().col();
282 for_all_comps(i, components)
283 if (components(i).is_valid())
284 data::
fill((mask | bbox(i)).rw(), true);
286 internal::mask_non_text<mask_t, mln_value(I)> f(mask);
289 for_all_comps(i, components)
290 if (components(i).is_valid())
291 mln::draw::
box(output, bbox(i), literal::red);
297 # endif // ! MLN_INCLUDE_ONLY
305 #endif // ! SCRIBO_DEBUG_HIGHLIGHT_TEXT_AREA_HH