26 #ifndef SCRIBO_IO_IMG_INTERNAL_DEBUG_IMG_VISITOR_HH
27 # define SCRIBO_IO_IMG_INTERNAL_DEBUG_IMG_VISITOR_HH
35 # include <mln/core/image/image2d.hh>
36 # include <mln/value/rgb8.hh>
37 # include <mln/draw/polygon.hh>
38 # include <mln/subsampling/antialiased.hh>
39 # include <mln/morpho/elementary/gradient_external.hh>
40 # include <mln/draw/box.hh>
42 # include <scribo/core/internal/doc_serializer.hh>
43 # include <scribo/core/document.hh>
44 # include <scribo/core/paragraph_set.hh>
45 # include <scribo/core/line_info.hh>
47 # include <scribo/util/component_precise_outline.hh>
48 # include <scribo/io/img/internal/draw_edges.hh>
49 # include <scribo/text/paragraphs_closing.hh>
71 unsigned output_ratio);
84 unsigned output_ratio;
93 # ifndef MLN_INCLUDE_ONLY
101 pmin = b.
pmin() / output_ratio,
102 pmax = b.
pmax() / output_ratio;
104 return box2d(pmin, pmax);
108 template <
typename L>
110 unsigned output_ratio)
111 : output(out), output_ratio(output_ratio)
119 template <
typename L>
121 debug_img_visitor<L>::visit(
const document<L>& doc)
const
125 doc.paragraphs().accept(*
this);
128 if (doc.has_elements())
130 for_all_comps(e, doc.elements())
132 lbl_ = doc.elements().labeled_image();
133 if (doc.elements()(e).is_valid())
134 doc.elements()(e).accept(*
this);
139 if (doc.has_vline_seps())
141 lbl_ = doc.vline_seps_comps().labeled_image();
142 for_all_comps(c, doc.vline_seps_comps())
143 if (doc.vline_seps_comps()(c).is_valid())
144 doc.vline_seps_comps()(c).accept(*
this);
146 if (doc.has_hline_seps())
148 lbl_ = doc.hline_seps_comps().labeled_image();
149 for_all_comps(c, doc.hline_seps_comps())
150 if (doc.hline_seps_comps()(c).is_valid())
151 doc.hline_seps_comps()(c).accept(*
this);
159 template <
typename L>
161 debug_img_visitor<L>::visit(
const component_info<L>&
info)
const
167 par = scribo::util::component_precise_outline(lbl_ | info.bbox(), id);
196 template <
typename L>
198 debug_img_visitor<L>::visit(
const paragraph_set<L>& parset)
const
200 const line_set<L>& lines = parset.lines();
203 L par_clo = text::paragraphs_closing(parset);
205 for_all_paragraphs(p, parset)
206 if (parset(p).is_valid())
210 for_all_paragraph_lines(lid, line_ids)
212 line_id_t l = line_ids(lid);
213 lines(l).accept(*
this);
217 box2d b = compute_bbox(parset(p).
bbox());
225 template <
typename L>
227 debug_img_visitor<L>::visit(
const line_info<L>&
line)
const
230 pmin = line.bbox().pmin(),
231 pmax = line.bbox().pmax();
232 pmax.
row() = line.baseline();
233 pmin.
row() = line.baseline();
235 pmin = pmin / output_ratio;
236 pmax = pmax / output_ratio;
241 #endif // MLN_INCLUDE_ONLY
251 #endif // SCRIBO_IO_IMG_INTERNAL_DEBUG_IMG_VISITOR_HH