From 8032c9963c929ae4eaf5f08e51465caf841bf770 Mon Sep 17 00:00:00 2001 From: treeform Date: Thu, 25 Feb 2021 08:51:09 -0800 Subject: [PATCH] Add a masking example. --- README.md | 23 +++++++++++++++++++++++ examples/masking.nim | 30 ++++++++++++++++++++++++++++++ examples/masking.png | Bin 0 -> 6058 bytes tools/gen_readme.nim | 1 + 4 files changed, 54 insertions(+) create mode 100644 examples/masking.nim create mode 100644 examples/masking.png diff --git a/README.md b/README.md index 1efdd0f..7056f01 100644 --- a/README.md +++ b/README.md @@ -142,6 +142,29 @@ image.fillPath( ``` ![example output](examples/heart.png) +### Masking +[examples/masking.nim](examples/masking.nim) +```nim +lines.strokeSegment( + segment(vec2(25, 25), vec2(175, 175)), color, strokeWidth = 30) +lines.strokeSegment( + segment(vec2(25, 175), vec2(175, 25)), color, strokeWidth = 30) + +mask.fillPath( + """ + M 20 60 + A 40 40 90 0 1 100 60 + A 40 40 90 0 1 180 60 + Q 180 120 100 180 + Q 20 120 20 60 + z + """ +) +lines.draw(mask) +image.draw(lines) +``` +![example output](examples/masking.png) + ### Shadow [examples/shadow.nim](examples/shadow.nim) ```nim diff --git a/examples/masking.nim b/examples/masking.nim new file mode 100644 index 0000000..a074049 --- /dev/null +++ b/examples/masking.nim @@ -0,0 +1,30 @@ +import pixie + +let + image = newImage(200, 200) + lines = newImage(200, 200) + mask = newMask(200, 200) + color = parseHtmlColor("#F8D1DD").rgba + +lines.fill(parseHtmlColor("#FC427B").rgba) +image.fill(rgba(255, 255, 255, 255)) + +lines.strokeSegment( + segment(vec2(25, 25), vec2(175, 175)), color, strokeWidth = 30) +lines.strokeSegment( + segment(vec2(25, 175), vec2(175, 25)), color, strokeWidth = 30) + +mask.fillPath( + """ + M 20 60 + A 40 40 90 0 1 100 60 + A 40 40 90 0 1 180 60 + Q 180 120 100 180 + Q 20 120 20 60 + z + """ +) +lines.draw(mask) +image.draw(lines) + +image.writeFile("examples/masking.png") diff --git a/examples/masking.png b/examples/masking.png new file mode 100644 index 0000000000000000000000000000000000000000..c95e421f7f8679f13b689ea9a718c3b4b3ea4da2 GIT binary patch literal 6058 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 frqlm7-`