Image 被声明为具有以下方法集的接口:
type Image interface {
ColorModel() color.Model
Bounds() Rectangle
At(x, y int) color.Color
}
方法ColorModel()返回一个名为color.Model的接口,声明为:
type Model interface {
Convert(c Color) Color
}
由于ColorModel 返回一个接口,您不能使用* 取消引用它。你看到的&{0x492f70}是实现color.Model接口的底层数据结构,在这种情况下,它是一个指向地址0x492f70的指针。通常,ColorModel 的底层数据如何实现并不重要(任何类型都有效,只要它有Convert(c Color) Color 方法),但如果你好奇,几种标准颜色类型的模型实现为指向unexported struct 的指针声明为:
type modelFunc struct {
f func(Color) Color
}
打印ColorModel 时得到的是指向该结构的指针。尝试使用fmt.Printf("%+v\n", img.ColorModel()) 打印它,您会看到类似&{f:0x492f70} 的输出,其中f 表示上述结构中的字段名称。
在the documentation 中,有几种标准颜色类型的模型,例如color.NRGBAModel、color.GrayModel等。如果要检测图像的颜色模型,可以将其与这些标准模型进行比较,例如
if img.ColorModel() == color.RGBAModel {
//32-bit RGBA color, each R,G,B, A component requires 8-bits
} else if img.ColorModel() == color.GrayModel {
//8-bit grayscale
}
//...