如何在Go

时间:2015-08-26 02:21:27

标签: go

我在图像的像素上迭代,尝试获取各个颜色值并将其平均。当我这样做时:

bounds := img.Bounds()

for y := bounds.Min.Y; y < bounds.Max.Y; y++ {
  for x := bounds.Min.X; x < bounds.Max.X; x++ {
    fmt.Println(reflect.TypeOf(img.At(x, y)))     
  }
}

我得到color.YCbCr十亿次。如果我在没有reflect.TypeOf的情况下打印它,我会得到如下结果:

{154 135 124}   
{153 135 124}   
{152 135 124}   
{152 135 124}   
{151 135 124}   
{149 135 124}   
{147 135 124}   

我需要能够访问单独的Y,Cb和Cr颜色,但是当我尝试img.At(x, y).Cbimg.At(x, y)['Y']或甚至img.At(x, y)[0]时,我会收到各种编译时错误我color.Color没有这些方法或者不支持索引。

2 个答案:

答案 0 :(得分:2)

添加此项以供将来参考,但要访问基础color.YCbCr,您只需键入断言值,例如:

for y := bounds.Min.Y; y < bounds.Max.Y; y++ {
    for x := bounds.Min.X; x < bounds.Max.X; x++ {
        if c, ok := img.At(x, y).(color.YCbCr); ok {
            fmt.Println(c.Y, c.Cb, c.Cr)
        } else {
            fmt.Println(reflect.TypeOf(img.At(x, y)))
        }
    }
}

答案 1 :(得分:1)

事实证明我需要的方法是img.At(x, y).RGBA(),这将分别返回这些值。