长安链 DApp 开发必学 Go 14:Image 接口

85 阅读1分钟

这一章继续看 go 语言中内置的接口。

image 包中定义了 Image 接口:

package image

type Image interface {
    ColorModel() color.Model             // 颜色模式,比较经典的就是 RGB
    Bounds() Rectangle                   // 图片的框
    At(x, y int) color.Color             // 图片某个像素点的颜色
}

看个调用的实例:

package main

import (
	"fmt"
	"image"
)

func main() {
	m := image.NewRGBA(image.Rect(0, 0, 100, 100))    // 颜色模式,图片框大小
	fmt.Println(m.Bounds())                           // 打印图片的框
	fmt.Println(m.At(0, 0).RGBA())                    // 打印图片某个像素点的颜色
}

来实战实现一个自定义的 Image 接口,这个代码可以在这个网址中运行,因为它调用了一个自定义的包:

package main

import (
	"image"
	"image/color"

	"golang.org/x/tour/pic"
)

type Image struct{}                               // 声明 Image 

func (img Image) ColorModel() color.Model {       // 实现 ColorModel,返回 RGBAModel
	return color.RGBAModel
}

func (img Image) Bounds() image.Rectangle {       // 返回图片大小,可以自定义
	return image.Rect(0, 0, 255, 255)
}

func (img Image) At(x, y int) color.Color {       // 返回每个点的颜色,可以用于绘图
	v := uint8(x ^ y)
	return color.RGBA{v, v, 255, 255}
}

func main() {
	m := Image{}               // 初始化
	pic.ShowImage(m)
}

ok,我们展示了多种官方源码里怎么使用接口的示例,更好的感受接口 interface 在实际开发中的应用。

关于接口 interface 的内容就结束了。go 语言中没有类的概念,如果要采用面向对象编程的思想,就需要借助接口 interface 来实现,这也是大部分 go 框架中使用的模式。

下一章我们继续探索 go 语言。