]> Cypherpunks repositories - gostls13.git/commitdiff
image/draw: add FloydSteinberg Drawer example
authorBrad Fitzpatrick <bradfitz@golang.org>
Tue, 20 Sep 2016 23:43:15 +0000 (23:43 +0000)
committerBrad Fitzpatrick <bradfitz@golang.org>
Wed, 21 Sep 2016 00:08:58 +0000 (00:08 +0000)
Updates #16360

Change-Id: I80b981aa291a8e16d2986d4a2dfd84d3819bf488
Reviewed-on: https://go-review.googlesource.com/29443
Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Joe Tsai <thebrokentoaster@gmail.com>
src/image/draw/example_test.go [new file with mode: 0644]

diff --git a/src/image/draw/example_test.go b/src/image/draw/example_test.go
new file mode 100644 (file)
index 0000000..2ccc2f4
--- /dev/null
@@ -0,0 +1,48 @@
+// Copyright 2016 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 draw_test
+
+import (
+       "fmt"
+       "image"
+       "image/color"
+       "image/draw"
+       "math"
+)
+
+func ExampleDrawer_floydSteinberg() {
+       const width = 130
+       const height = 50
+
+       im := image.NewGray(image.Rectangle{Max: image.Point{X: width, Y: height}})
+       for x := 0; x < width; x++ {
+               for y := 0; y < height; y++ {
+                       dist := math.Sqrt(math.Pow(float64(x-width/2), 2)/3+math.Pow(float64(y-height/2), 2)) / (height / 1.5) * 255
+                       var gray uint8
+                       if dist > 255 {
+                               gray = 255
+                       } else {
+                               gray = uint8(dist)
+                       }
+                       im.SetGray(x, y, color.Gray{Y: 255 - gray})
+               }
+       }
+       pi := image.NewPaletted(im.Bounds(), []color.Color{
+               color.Gray{Y: 255},
+               color.Gray{Y: 160},
+               color.Gray{Y: 70},
+               color.Gray{Y: 35},
+               color.Gray{Y: 0},
+       })
+
+       draw.FloydSteinberg.Draw(pi, im.Bounds(), im, image.ZP)
+       shade := []string{" ", "░", "▒", "▓", "█"}
+       for i, p := range pi.Pix {
+               fmt.Print(shade[p])
+               if (i+1)%width == 0 {
+                       fmt.Print("\n")
+               }
+       }
+}