diff --git a/content/moretypes/exercise-slices.go b/content/moretypes/exercise-slices.go index 094ec09c..28068bbb 100644 --- a/content/moretypes/exercise-slices.go +++ b/content/moretypes/exercise-slices.go @@ -2,7 +2,7 @@ package main -import "golang.org/x/tour/pic" +import "github.com/Go-zh/tour/pic" func Pic(dx, dy int) [][]uint8 { } diff --git a/pic/pic.go b/pic/pic.go new file mode 100644 index 00000000..1d1a6c00 --- /dev/null +++ b/pic/pic.go @@ -0,0 +1,43 @@ +// Copyright 2011 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 pic // import "github.com/Go-zh/tour/pic" + +import ( + "bytes" + "encoding/base64" + "fmt" + "image" + "image/png" +) + +func Show(f func(int, int) [][]uint8) { + const ( + dx = 256 + dy = 256 + ) + data := f(dx, dy) + m := image.NewNRGBA(image.Rect(0, 0, dx, dy)) + for y := 0; y < dy; y++ { + for x := 0; x < dx; x++ { + v := data[y][x] + i := y*m.Stride + x*4 + m.Pix[i] = v + m.Pix[i+1] = v + m.Pix[i+2] = 255 + m.Pix[i+3] = 255 + } + } + ShowImage(m) +} + +func ShowImage(m image.Image) { + var buf bytes.Buffer + err := png.Encode(&buf, m) + if err != nil { + panic(err) + } + enc := base64.StdEncoding.EncodeToString(buf.Bytes()) + fmt.Println("IMAGE:" + enc) +}