| // 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+++................ |
| } |