go - image.Image 接口(interface)中 ColorModel() 方法的用途是什么?

标签 go

Go 的 image.Image 接口(interface)具有三个方法:Bounds(对于确定图像的大小显然是必需的)、At(返回每个像素的实际颜色)和 ColorModel。最后一个方法返回一个 color.Model,它能够将任何模型中的颜色转换为该图像使用的表示形式。

为什么ColorModel是这个界面的一部分? image.Image 类型的使用者如何使用它?如果我有一个图像 img,并且我对其底层表示一无所知,那么 img.ColorModel() 对我有什么好处呢?我可以将任何颜色转换为正确的模型,但我不知道可以使用这种转换后的颜色做什么;与图像交互的另外两种方式,AtBounds,不将颜色作为参数。

我错过了什么吗?是否有标准库函数调用 image.ImageColorModel 方法,其用途是什么?

最佳答案

我不确定我是否完全理解你的问题,但我不认为 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/

相关文章:

go - 如何使用安全随机数创建一个大整数

go - 使用特定数字类型而不是其他数字类型意味着什么

mongodb - golang中如何根据查询字符串中输入的数据获取数据?

go - 使用中间处理函数来路由请求

go - 创建GPA计算器时遇到问题

go - 获取子域名

使用chardata在golang中解析xml

go - 有 time.Sleep() 的无限循环与没有 time.Sleep() 的无限循环

go - 将 go embedded struct 传递给函数

go - 匿名 go 函数可以调用自身吗?