英文:
tour.golang.org#36 The functionality implemented by pic.Show
问题
在这个例子中,pic.Show(Pic)
语句的作用是将通过Pic
函数生成的图像显示出来。Pic
函数接受两个参数dx
和dy
,表示图像的宽度和高度。它返回一个二维的uint8
类型的切片,表示图像的像素值。pic.Show
函数会将这个像素值切片转换为图像并显示出来。
当你运行这个例子时,它会在标准输出上打印一些字符,这些字符实际上是表示图像的文本表示形式。如果你想要在图形界面中显示图像,你可以尝试在本地运行这段代码,或者使用支持图形界面的在线Go编译器。
英文:
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?
答案1
得分: 7
pic.Show()
创建图像并将其编码为 base64。以下是代码:
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)
}
有趣的是,它最终打印出字符串 "IMAGE:",后面跟着 base64 编码的字符串。似乎 play.golang.org 解析输出并将其转换为 img
标签。可以尝试以下示例:http://play.golang.org/p/RZPqp164eS
英文:
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
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论