14constexpr auto to_qt = overloaded{
17 return {self(v.min_corner()), self(v.max_corner())};
20 return v | std::views::transform(self) | std::ranges::to<QList>();
23 auto ret = QPainterPath{};
24 ret.addPolygon(self(v.outer()));
25 for (
auto& item : v.inners())
26 ret.addPolygon(self(item));
45 execution_policy
auto policy,
46 boost::gil::rgba8c_view_t in,
53 auto [fwd, inv] = bidirectional(in_affine, in_crs, out_affine, out_crs);
55 fwd(multi_point(in.width(), in.height()))
58 .transform(&QRectF::toAlignedRect)
59 .transform(std::bind_front(&QRect::intersected, out.window()));
60 if (!mbr || mbr->isEmpty())
62 auto img = QImage{mbr->size(), QImage::Format_RGBA8888};
63 auto ys = std::views::iota(0, img.height());
64 auto pixel = get_pixel(in);
65 std::for_each(policy, ys.begin(), ys.end(), [&](
int y) {
66 auto ln = reinterpret_cast<uint8_t*>(img.scanLine(y));
67 for (int x{}; x < img.width(); ++x) {
72 *
reinterpret_cast<boost::gil::rgba8_pixel_t*
>(ln + x * 4) = *px;
74 std::fill_n(ln + x * 4, 4, 0);
77 out.drawImage(mbr->topLeft(), img);
void draw_image(execution_policy auto policy, boost::gil::rgba8c_view_t in, geometry::matrix const &in_affine, geometry::srs_spec auto &&in_crs, QPainter &out, geometry::matrix const &out_affine, geometry::srs_spec auto &&out_crs)
Definition qt.hpp:44