Go 的 image.Image
接口(interface)具有三个方法:Bounds
(对于确定图像的大小显然是必需的)、At
(返回每个像素的实际颜色)和 ColorModel
。最后一个方法返回一个 color.Model
,它能够将任何模型中的颜色转换为该图像使用的表示形式。
为什么ColorModel
是这个界面的一部分? image.Image
类型的使用者如何使用它?如果我有一个图像 img
,并且我对其底层表示一无所知,那么 img.ColorModel()
对我有什么好处呢?我可以将任何颜色转换为正确的模型,但我不知道可以使用这种转换后的颜色做什么;与图像交互的另外两种方式,At
和 Bounds
,不将颜色作为参数。
我错过了什么吗?是否有标准库函数调用 image.Image
的 ColorModel
方法,其用途是什么?
最佳答案
我不确定我是否完全理解你的问题,但我不认为 ColorModel() 的目的是改变颜色。只是为了获取颜色模型。
标准库主要在编码图像时使用它,例如在 png 包中:
switch m.ColorModel() {
case color.GrayModel:
e.cb = cbG8
case color.Gray16Model:
e.cb = cbG16
case color.RGBAModel, color.NRGBAModel, color.AlphaModel:
if opaque(m) {
e.cb = cbTC8
} else {
e.cb = cbTCA8
}
default:
if opaque(m) {
e.cb = cbTC16
} else {
e.cb = cbTCA16
}
}
关于其预期用途的另一个提示可以在 jpeg/writer 中找到:
// TODO(wathiede): switch on m.ColorModel() instead of type.
关于go - image.Image 接口(interface)中 ColorModel() 方法的用途是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46532450/