gpt4 book ai didi

colors - 使用 Color 包从 RGB 值创建新的颜色?

转载 作者:IT王子 更新时间:2023-10-29 01:21:23 24 4
gpt4 key购买 nike

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

http://golang.org/pkg/image/color/


package main

import (
"fmt"
"image"
_ "image/gif"
_ "image/jpeg"
_ "image/png"
"os"
)

func main() {
reader, err := os.Open("test-image.jpg")
if err != nil {
fmt.Fprintf(os.Stderr, "%v\n", err)
}

image, _, err := image.Decode(reader)
if err != nil {
fmt.Fprintf(os.Stderr, "%s", err)
}

bounds := image.Bounds()

for i := 0; i <= bounds.Max.X; i++ {
for j := 0; j <= bounds.Max.Y; j++ {
pixel := image.At(i, j)
if i == 0 && j == 0 {
red, green, blue, _ := pixel.RGBA()
averaged := (red + green + blue) / 3

// This FromRGBA function DOES NOT EXIST!
grayColor := Color.FromRGBA(averaged, averaged, averaged, 1)

// Then I could do something like:
grayColor.RGBA() // This would work since it's a type Color.

}
}
}
}

我似乎无法找到任何生成给定 rgba 值的新 Color 对象的包 Function。

有什么建议吗?

最佳答案

image.Color 实际上是一个接口(interface)。您可以使用满足它的任何结构。甚至您自己的结构。

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

grayColor := image.Gray{averaged}

或者你自己的 grayColor:

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

关于colors - 使用 Color 包从 RGB 值创建新的颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22083460/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com