【问题标题】:Golang making RGBA images display weird colorsGolang 制作 RGBA 图像显示奇怪的颜色
【发布时间】:2019-01-22 13:09:40
【问题描述】:

所以我按照某种模式逐个像素地制作一些 rgba 图像,然后将它们保存为 png,并注意到当 alpha 通道随着某些颜色发生变化时,它会在存储为 png 时改变整个像素的颜色。

我做了一个测试来显示当前正在发生的事情:

    img := image.NewRGBA(image.Rect(0, 0, 250, 250))
    for y := 0; y < height; y++ {
        for x := 0; x < width; x++ {
            f.Read(b)
            img.SetRGBA(x, y, color.RGBA{
                249,
                214,
                133,
                255,
            })
        }
    }
    var buff bytes.Buffer
    err := png.Encode(&buff, img)
    if err != nil {
        log.Println(err)
        return
    }

这将打印彩色图像#F9D685。但是,如果我将 alpha 更改为 200,它将用 #6844BC 和透明度打印另一个,而不是用它的透明度打印原始颜色。

有没有办法解决这个问题?我相信这是因为我错过了一些东西,但无法真正弄清楚,并且在 google/here 上没有找到与我发生的事情相似的任何事情。

【问题讨论】:

    标签: image go transparency rgba


    【解决方案1】:

    那个很简单:

    go doc color.RGBA
    

    包装颜色//导入“图像/颜色”

    type RGBA struct {
        R, G, B, A uint8
    }
    

    RGBA 表示传统的 32 位 alpha 预乘颜色,有 8 红色、绿色、蓝色和 alpha 的每个位。

    一个 alpha 预乘颜色分量 C 已经被 alpha (A) 缩放,所以 具有有效值 0

    您可能正在寻找color.NRGBA

    (总是,真的总是,查阅相关类型和函数的文档。总是。)

    【讨论】:

    • 谢谢,我错误地认为这是理所当然的。它有效。
    猜你喜欢
    • 1970-01-01
    • 2018-03-09
    • 1970-01-01
    • 2017-04-10
    • 2018-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多