Tour.golang.org # 36 Functionality implemented by pic.Show

In tour.golang.org, Exercise 36 , what should this pic.Show(Pic) statement pic.Show(Pic) ?

 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 prints some characters on the standard output, shouldn't it show some kind of image?

+4
source share
1 answer

pic.Show() creates an 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) } 

The funny thing is that the printing of the "IMAGE:" line ends, followed by the base64 encoded line. Play.golang.org seems to be analyzing the output, converting it to an img tag. Try the following example: http://play.golang.org/p/RZPqp164eS

+5
source

Source: https://habr.com/ru/post/1499964/


All Articles