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
阅读 5.5k
2 个回答
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
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题