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 bits = img.bits();
64 auto stride = img.bytesPerLine();
65 auto ys = std::views::iota(0, img.height());
66 auto pixel = get_pixel(in);
67 std::for_each(policy, ys.begin(), ys.end(), [&](
int y) {
68 auto ln = bits + y * stride;
69 for (int x{}; x < img.width(); ++x) {
74 *
reinterpret_cast<boost::gil::rgba8_pixel_t*
>(ln + x * 4) = *px;
76 std::fill_n(ln + x * 4, 4, 0);
79 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