| // Copyright 2021 The Go Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style | |
| // license that can be found in the LICENSE file. | |
| package vector_test | |
| import ( | |
| "image" | |
| "image/draw" | |
| "os" | |
| "golang.org/x/image/vector" | |
| ) | |
| func Example_draw() { | |
| const ( | |
| width = 30 | |
| height = 20 | |
| ) | |
| // Define a closed shape with three edges: two linear and one quadratic. | |
| // One of its vertices is at the top-left corner of the (1, 2) pixel, which | |
| // is also the bottom-right corner of the (0, 1) pixel. | |
| // | |
| // Co-ordinates can be floating point numbers, not just integers. They can | |
| // also be outside the vector.Rasterizer's dimensions. The shapes will be | |
| // clipped during rasterization. | |
| r := vector.NewRasterizer(width, height) | |
| r.DrawOp = draw.Src | |
| r.MoveTo(1, 2) | |
| r.LineTo(20, 2) | |
| r.QuadTo(40.5, 15, 10, 20) | |
| r.ClosePath() | |
| // Finish the rasterization: the conversion from vector graphics (shapes) | |
| // to raster graphics (pixels). Co-ordinates are now integers. | |
| dst := image.NewAlpha(image.Rect(0, 0, width, height)) | |
| r.Draw(dst, dst.Bounds(), image.Opaque, image.Point{}) | |
| // Visualize the pixels. | |
| const asciiArt = ".++8" | |
| buf := make([]byte, 0, height*(width+1)) | |
| for y := 0; y < height; y++ { | |
| for x := 0; x < width; x++ { | |
| a := dst.AlphaAt(x, y).A | |
| buf = append(buf, asciiArt[a>>6]) | |
| } | |
| buf = append(buf, '\n') | |
| } | |
| os.Stdout.Write(buf) | |
| // Output: | |
| // .............................. | |
| // .............................. | |
| // .8888888888888888888+......... | |
| // .+88888888888888888888+....... | |
| // ..888888888888888888888+...... | |
| // ..+888888888888888888888+..... | |
| // ...8888888888888888888888+.... | |
| // ...+8888888888888888888888+... | |
| // ....88888888888888888888888+.. | |
| // ....+88888888888888888888888.. | |
| // .....88888888888888888888888.. | |
| // .....+8888888888888888888888.. | |
| // ......8888888888888888888888.. | |
| // ......+88888888888888888888+.. | |
| // .......8888888888888888888+... | |
| // .......+88888888888888888..... | |
| // ........888888888888888+...... | |
| // ........+88888888888+......... | |
| // .........8888888++............ | |
| // .........+8+++................ | |
| } |