Colors 使用颜色包从RGB值创建新颜色?

Colors 使用颜色包从RGB值创建新颜色?,colors,go,pixel,rgba,Colors,Go,Pixel,Rgba,我正在尝试使用变量中的RGB值创建一个新的颜色对象: 主程序包 进口( “fmt” “图像” _“图像/gif” _“图像/jpeg” _“图像/png” “操作系统” ) func main(){ reader,err:=os.Open(“test image.jpg”) 如果错误!=零{ fmt.Fprintf(os.Stderr,“%v\n”,错误) } 图像,错误:=图像。解码(读卡器) 如果错误!=零{ fmt.Fprintf(os.Stderr,“%s”,错误) } 边界:=im

我正在尝试使用变量中的RGB值创建一个新的
颜色
对象:


主程序包
进口(
“fmt”
“图像”
_“图像/gif”
_“图像/jpeg”
_“图像/png”
“操作系统”
)
func main(){
reader,err:=os.Open(“test image.jpg”)
如果错误!=零{
fmt.Fprintf(os.Stderr,“%v\n”,错误)
}
图像,错误:=图像。解码(读卡器)
如果错误!=零{
fmt.Fprintf(os.Stderr,“%s”,错误)
}
边界:=image.bounds()

对于i:=0;i图像/颜色
包中的类型具有导出字段,因此您可以直接实例化它们。例如,您可以使用以下方法创建颜色值:

grayColor := color.Gray16{Y: uint16(averaged)}

(红色
绿色
蓝色
值都在
0..0xffff
范围内,因此16位灰色实现似乎是合适的)。

图像。颜色实际上是一个接口。您可以使用满足它的任何结构。甚至您自己的结构

例如,您可以使用image.Gary:

grayColor := image.Gray{averaged}
或您自己的灰色:

type MyGray struct {
    y uint32
}

func (gray *MyGray) FromRGBA(r, g, b, a uint32) {
    gray.y = (r + g + b) / 3
}

func (gray *MyGray) RGBA() (r, g, b, a uint32) { // to satisfy image.Color
    return gray.y, gray.y, gray.y, 1
}

grayColor := &MyGray{}
grayColor.FromRGBA(pixel.RGBA())
grayColor.RGBA()
// blablabla

Gray Gary令人困惑。不清楚这些是打字错误还是关于新颜色名称的笑话,但在任何情况下都会让人困惑。打字和复制粘贴错误。很抱歉!--!NP但仍有一个实例存在
image.Gary
type MyGray struct {
    y uint32
}

func (gray *MyGray) FromRGBA(r, g, b, a uint32) {
    gray.y = (r + g + b) / 3
}

func (gray *MyGray) RGBA() (r, g, b, a uint32) { // to satisfy image.Color
    return gray.y, gray.y, gray.y, 1
}

grayColor := &MyGray{}
grayColor.FromRGBA(pixel.RGBA())
grayColor.RGBA()
// blablabla