Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "draw.h"
- #include <agg2/agg_rendering_buffer.h>
- #include <agg2/agg_pixfmt_rgb.h>
- #include <agg2/agg_pixfmt_amask_adaptor.h>
- #include <agg2/agg_alpha_mask_u8.h>
- #include <agg2/agg_renderer_base.h>
- #include <agg2/agg_renderer_primitives.h>
- #include <agg2/agg_renderer_markers.h>
- #include <agg2/agg_scanline_u.h>
- #include <agg2/agg_renderer_scanline.h>
- #include <agg2/agg_rasterizer_scanline_aa.h>
- #include <agg2/agg_path_storage.h>
- #include <agg2/agg_conv_stroke.h>
- #include <agg2/agg_ellipse.h>
- std::vector<uint8_t> getImage(int width, int height) {
- std::vector<uint8_t> buf(width * height * 3, 255);
- agg::rendering_buffer rbuf(buf.data(), width, height, width * 3);
- agg::pixfmt_rgb24 pixf(rbuf);
- agg::rasterizer_scanline_aa<> rast;
- agg::scanline_u8 scanline;
- std::vector<uint8_t> amask_buf(width * height);
- agg::rendering_buffer amask_rbuf(amask_buf.data(), width, height, width);
- agg::amask_no_clip_gray8 amask(amask_rbuf);
- // agg::renderer_base<decltype(amask)> amask_ren(amask);
- // agg::ellipse ellipse(400, 400, 170, 130, 70);
- // rast.add_path(ellipse);
- // agg::render_scanlines_aa_solid(rast, scanline, amask_ren, 255);
- // rast.reset();
- // alpha gradient
- for (int i = 0; i < height; ++i) {
- std::fill(amask_rbuf.row_ptr(i),
- amask_rbuf.row_ptr(i) + width,
- 255 * i / height);
- }
- // rainbow
- std::vector<agg::rgba8> span;
- span.reserve(width);
- for (int i = 0; i < width; ++i) {
- span.emplace_back(agg::rgba::from_wavelength(380. + 400. * i / width,
- 0.9));
- }
- std::fill(amask_rbuf.row_ptr(0),
- amask_rbuf.row_ptr(0) + width, 255);
- using adaptor = agg::pixfmt_amask_adaptor<agg::pixfmt_rgb24,
- agg::amask_no_clip_gray8>;
- adaptor pixf_amask(pixf, amask);
- for (int i = 0; i < height; ++i) {
- // pixf_amask.blend_color_hspan(0, i, width, span.data(), nullptr, 255);
- pixf_amask.copy_color_hspan(0, i, width, span.data());
- }
- agg::renderer_base<agg::pixfmt_rgb24> renderer(pixf);
- // renderer.clip_box(100, 120, 200, 300);
- // renderer.copy_bar(140, 120, 700, 500, agg::rgba8(255, 128, 0));
- agg::renderer_primitives<decltype(renderer)> ren_primitives(renderer);
- ren_primitives.fill_color(agg::rgba8(0, 128, 0));
- ren_primitives.line_color(agg::rgba8(0, 0, 0));
- ren_primitives.line(ren_primitives.coord(100),
- ren_primitives.coord(120),
- ren_primitives.coord(200),
- ren_primitives.coord(200), true);
- agg::renderer_markers<decltype(renderer)> ren_markers(renderer);
- ren_markers.line_color(agg::rgba8(0, 0, 0));
- ren_markers.fill_color(agg::rgba8(0, 128, 0));
- ren_markers.semiellipse_up(150, 150, 20);
- ren_markers.circle(150, 150, 1);
- rast.gamma(agg::gamma_none());
- rast.reset();
- rast.move_to_d(100, 250);
- rast.line_to_d(200, 900);
- rast.line_to_d(150, 250);
- agg::render_scanlines_aa_solid(rast, scanline, renderer,
- agg::rgba8(0, 0, 0, 255));
- agg::path_storage ps;
- ps.remove_all();
- ps.move_to(300, 128);
- ps.line_to(350, 256);
- ps.line_to(450, 200);
- ps.arc_rel(40, 30, 0.5, false, true, 150, 100);
- agg::conv_stroke<agg::path_storage> pg(ps);
- pg.line_join(agg::line_join_e::round_join);
- pg.width(0.08);
- rast.reset();
- rast.add_path(pg);
- agg::render_scanlines_aa_solid(rast, scanline, renderer,
- agg::rgba8(0, 0, 0, 255));
- ps.remove_all();
- ps.move_to(500, 500);
- ps.line_to(400, 450.2);
- ps.line_to(400, 450);
- ps.line_to(502, 497.5);
- rast.add_path(ps);
- agg::render_scanlines_aa_solid(rast, scanline, renderer,
- agg::rgba8(0, 0, 0));
- // agg::ellipse ellipse(400, 400, 170, 130, 70);
- // rast.add_path(ellipse);
- // agg::render_scanlines_aa_solid(rast, scanline, renderer,
- // agg::rgba8(0, 0, 0, 255));
- ren_markers.line_color(agg::rgba(0, 255, 0));
- ren_markers.pixel(300, 128, 0);
- ren_markers.pixel(350, 256, 0);
- return buf;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement