练习原文
还记得之前编写的图片生成器吗?现在来另外编写一个,不过这次将会返回 image.Image 来代替 slice 的数据。
自定义的 Image 类型,要实现必要的方法,并且调用 pic.ShowImage。
Bounds 应当返回一个 image.Rectangle,例如 `image.Rect(0, 0, w, h)`。
ColorModel 应当返回 color.RGBAModel。
At 应当返回一个颜色;在这个例子里,在最后一个图片生成器的值 v 匹配 `color.RGBA{v, v, 255, 255}`。
关键信息
// 1 先了解官方 image的结构
type Image interface {
/**颜色模式*/
ColorModel() color.Model
/**图片边界*/
Bounds() Rectangle
/**某个点的颜色*/
At(x, y int) color.Color
}
// 2 重点是实现 Image的方法,这样就可以自己使用了
代码
package main
import (
"golang.org/x/tour/pic"
"image"
"image/color"
)
// 1 新建构造体
type Image struct{}
// 2 实现官方image的三个方法
func (i Image) ColorModel() color.Model {
return color.RGBAModel
}
func (i Image) Bounds() image.Rectangle {
// 这里的200(宽 高)我写死了 仅仅是展示作用 正确做法是从 i 中获取
return image.Rect(0, 0, 200, 200)
}
func (i Image) At(x, y int) color.Color {
return color.RGBA{uint8(x), uint8(y), uint8(255), uint8(255)}
}
func main() {
// 可以自己设置宽高,传递进去
m := Image{}
// 3 调用
pic.ShowImage(m)
}
运行结果
PS
真实效果
方式一
使用在线在线编译器,吧上面代码拷贝进去
方式二
本地操作显示图片,请参考Go指南练习之《slice》后续部分