In tour.golang.org , exercice 36 , what this statement pic.Show(Pic)
supposed to do?
package main
import "code.google.com/p/go-tour/pic"
func Pic(dx, dy int) [][]uint8 {
var p = make([]([]uint8), dy)
for i := 0; i < len(p); i++ {
p[i] = make([]uint8, dx)
for j := 0; j < len(p[i]); j++ {
p[i][j] = uint8((i + j) / 2)
}
}
return p
}
func main() {
pic.Show(Pic)
}
when I run the example, it just print some characters on the standard output, isn’t supposed to show some picture?
pic.Show()
creates the image and encodes it as base64. Here is the code:
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)
}
Funny thing is it ends up printing the string "IMAGE:" followed by the base64 encoded string. Seems that play.golang.org parses the output converting this to an img
tag. Try the following example: http://play.golang.org/p/RZPqp164eS