练习 图像

问题

还记得之前编写的图片生成器吗?我们再来编写另外一个,不过这次它将会返回一个 image.Image 的实现而非一个数据切片。

定义你自己的 Image 类型,实现必要的方法并调用 pic.ShowImage。

Bounds 应当返回一个 image.Rectangle ,例如 image.Rect(0, 0, w, h)。

ColorModel 应当返回 color.RGBAModel。

At 应当返回一个颜色。上一个图片生成器的值 v 对应于此次的 color.RGBA{v, v, 255, 255}。

背景知识

这一次,我们需要更多的接口具体实现细节了。

1. 什么是图片生成器?
func main() {
    m := image.NewRGBA(image.Rect(0, 0, 100, 100))
    fmt.Println(m.Bounds())
    fmt.Println(m.At(0, 0).RGBA())
}

image接口类型
type Image interface {
    ColorModel() color.Model
    Bounds() Rectangle
    At(x, y int) color.Color
}

NewRGBA函数
func NewRGBA(r Rectangle) *RGBA {
    w, h := r.Dx(), r.Dy()
    buf := make([]uint8, 4*w*h)
    return &RGBA{buf, 4 * w, r}
}

2. 查看image包的源代码以及image/color的源代码。

实现思路

  1. 需要实现Image类型的三个指定接口。
  2. 第一个接口直接返回color.RGBAModel
  3. 第二个接口,需要初始化部分变量。
  4. 第三个接口,部分变量做算法计算,赋值给color.RGBA

实现代码

GitHub

参考链接

  1. 练习:图像
打赏作者

您的支持将鼓励我们继续创作!

[微信] 扫描二维码打赏

[支付宝] 扫描二维码打赏

发表评论

电子邮件地址不会被公开。 必填项已用*标注