• 208

go 从RGBA() 获取原始的值

问题点: 在使用go RGBA() 获取到的值是运算后的值,与原始的rgba不一样,除了使用反射,怎么样获取到原始的rgb值呢

package main

import (
    "fmt"
    "image/png"
    "log"
    "os"
    "reflect"
)

func main() {
    file, err := os.Open("./main/test.png")
    checkErr(err)
    defer file.Close()
    im, err := png.Decode(file)
    checkErr(err)
    //width := im.Bounds().Max.X
    //height := im.Bounds().Max.Y

    color1 := im.At(100, 100)

    fmt.Println(color1)
    fmt.Println(color1.RGBA())

    colorValue := reflect.ValueOf(color1)
    count := colorValue.NumField()
    for i := 0; i < count; i++ {
        f := colorValue.Field(i)
        fmt.Println(f.Uint())
    }
}

func checkErr(err error) {
    if err != nil {
        log.Fatal(err)
    }
}

输出:

{199 237 204 255}
51143 60909 52428 65535
199
237
204
255
阅读 811
评论
    2 个回答
    • 208
    fmt.Println(color1.(color.NRGBA).R)
      fmt.Println(color1.(color.NRGBA).R)
      fmt.Println(color1.(color.NRGBA).A)
      fmt.Println(color1.(color.NRGBA).B)
      fmt.Println(color1.(color.NRGBA).G)

      NRGBA结构体

      // NRGBA represents a non-alpha-premultiplied 32-bit color.
      type NRGBA struct {
          R, G, B, A uint8
      }
        撰写回答

        登录后参与交流、获取后续更新提醒