5.6 KiB
ThorVG
ThorVG is a platform independent lightweight standalone C++ library for drawing vector-based shapes and SVG.
Contents
Building ThorVG
thorvg supports meson build system.
Meson Build
install meson and ninja if not already installed.
Run meson to configure ThorVG.
meson build
Run ninja to build & install ThorVG.
ninja -C build install
Quick Start
ThorVG renders vector shapes on a given canvas buffer.
You can initialize ThorVG engine first:
tvg::Initializer::init(tvg::CanvasEngine::Sw, 0); //engine method, thread count
You can prepare a empty canvas for drawing on it.
static uint32_t buffer[WIDTH * HEIGHT]; //canvas target buffer
auto canvas = tvg::SwCanvas::gen(); //generate a canvas
canvas->target(buffer, WIDTH, WIDTH, HEIGHT); //stride, w, h
Next you can draw multiple shapes onto the canvas.
auto rect = tvg::Shape::gen(); //generate a round rectangle
rect->appendRect(50, 50, 200, 200, 20, 20); //round geometry(x, y, w, h, rx, ry)
rect->fill(100, 100, 0, 255); //round rectangle color (r, g, b, a)
canvas->push(move(rect)); //push round rectangle drawing command
auto circle = tvg::Shape::gen(); //generate a circle
circle->appendCircle(400, 400, 100, 100); //circle geometry(cx, cy, radiusW, radiusH)
auto fill = tvg::RadialGradient::gen(); //generate radial gradient for circle fill
fill->radial(400, 400, 150); //radial fill info(cx, cy, radius)
tvg::Fill::ColorStop colorStops[2]; //gradient color info
colorStops[0] = {0, 255, 255, 255, 255}; //index, r, g, b, a (1st color value)
colorStops[1] = {1, 0, 0, 0, 255}; //index, r, g, b, a (2nd color value)
fill.colorStops(colorStop, 2); //set fil with gradient color info
circle->fill(move(fill)); //circle color
canvas->push(move(circle)); //push circle drawing command
This code result looks like this.
Or you can draw pathes with dash stroking.
auto path = tvg::Shape::gen(); //generate a path
path->moveTo(199, 34); //set sequential path coordinates
path->lineTo(253, 143);
path->lineTo(374, 160);
path->lineTo(287, 244);
path->lineTo(307, 365);
path->lineTo(199, 309);
path->lineTo(97, 365);
path->lineTo(112, 245);
path->lineTo(26, 161);
path->lineTo(146, 143);
path->close();
path->fill(150, 150, 255, 255); //path color
path->stroke(3); //stroke width
path->stroke(0, 0, 255, 255); //stroke color
path->stroke(tvg::StrokeJoin::Round); //stroke join style
path->stroke(tvg::StrokeCap::Round); //stroke cap style
float pattern[2] = {10, 10};
path->stroke(pattern, 2); //stroke dash pattern (line, gap)
canvas->push(move(path)); //push path drawing command
This path drawing result shows like this.
Next, this code snippet shows you how to draw SVG image.
auto picture = tvg::Picture::gen(); //generate a picture
picture->load("tiger.svg"); //Load SVG file.
canvas->push(move(picture)); //push picture drawing command
And here is the result.
Begin rendering & finish it at a particular time.
canvas->draw();
canvas->sync();
Now you can acquire the rendered image from the buffer memory.
Lastly, terminate the engine after usage.
tvg::Initializer::term(tvg::CanvasEngine::Sw);
SVG to PNG
If you want to preview ThorVG renderer's SVG output, you can use svg2png
converter which can be used to convert SVG file to PNG file.
To build svg2png
, you need to change the build option.
meson -Dutility=svg2png . build
Or you can add svg2png
value to utility
option in meson_option.txt
. Build output is located in builddir/src/bin/svg2png/
svg2png
creates FILENAME.svg.png
by entering path of svg file, resolution, and background color.
Usage:
svg2png [svgFileName] [Resolution] [bgColor]
Examples:
$ svg2png input.svg
$ svg2png input.svg 200x200
$ svg2png input.svg 200x200 ff00ff
API Bindings
Our main development APIs are written in C++ but ThorVG also provides API bindings such as: C.
Back to contents
Issues or Feature Requests?
For immediate assistant or support please reach us in Gitter