git.lucas.co / go_mono
git clone https://git.lucas.co/go_mono.git

vector/example_test.go (2K)

 1 // Copyright 2021 The Go Authors. All rights reserved.
 2 // Use of this source code is governed by a BSD-style
 3 // license that can be found in the LICENSE file.
 4 
 5 package vector_test
 6 
 7 import (
 8 	"image"
 9 	"image/draw"
10 	"os"
11 
12 	"golang.org/x/image/vector"
13 )
14 
15 func Example_draw() {
16 	const (
17 		width  = 30
18 		height = 20
19 	)
20 
21 	// Define a closed shape with three edges: two linear and one quadratic.
22 	// One of its vertices is at the top-left corner of the (1, 2) pixel, which
23 	// is also the bottom-right corner of the (0, 1) pixel.
24 	//
25 	// Co-ordinates can be floating point numbers, not just integers. They can
26 	// also be outside the vector.Rasterizer's dimensions. The shapes will be
27 	// clipped during rasterization.
28 	r := vector.NewRasterizer(width, height)
29 	r.DrawOp = draw.Src
30 	r.MoveTo(1, 2)
31 	r.LineTo(20, 2)
32 	r.QuadTo(40.5, 15, 10, 20)
33 	r.ClosePath()
34 
35 	// Finish the rasterization: the conversion from vector graphics (shapes)
36 	// to raster graphics (pixels). Co-ordinates are now integers.
37 	dst := image.NewAlpha(image.Rect(0, 0, width, height))
38 	r.Draw(dst, dst.Bounds(), image.Opaque, image.Point{})
39 
40 	// Visualize the pixels.
41 	const asciiArt = ".++8"
42 	buf := make([]byte, 0, height*(width+1))
43 	for y := 0; y < height; y++ {
44 		for x := 0; x < width; x++ {
45 			a := dst.AlphaAt(x, y).A
46 			buf = append(buf, asciiArt[a>>6])
47 		}
48 		buf = append(buf, '\n')
49 	}
50 	os.Stdout.Write(buf)
51 
52 	// Output:
53 	// ..............................
54 	// ..............................
55 	// .8888888888888888888+.........
56 	// .+88888888888888888888+.......
57 	// ..888888888888888888888+......
58 	// ..+888888888888888888888+.....
59 	// ...8888888888888888888888+....
60 	// ...+8888888888888888888888+...
61 	// ....88888888888888888888888+..
62 	// ....+88888888888888888888888..
63 	// .....88888888888888888888888..
64 	// .....+8888888888888888888888..
65 	// ......8888888888888888888888..
66 	// ......+88888888888888888888+..
67 	// .......8888888888888888888+...
68 	// .......+88888888888888888.....
69 	// ........888888888888888+......
70 	// ........+88888888888+.........
71 	// .........8888888++............
72 	// .........+8+++................
73 }