Golang заставляет изображения RGBA отображать странные цвета - PullRequest
0 голосов
/ 22 января 2019

Итак, я делаю некоторые изображения RGBA попиксельно, следуя определенному шаблону, и позже сохраняю их как png, и заметил, что, когда альфа-канал изменяется с определенными цветами, он меняет цвет всего пикселя, когда сохраняется как 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 .Но если я изменю альфу на 200, она напечатает другую с # 6844BC и прозрачностью вместо печати исходного цвета с его прозрачностью.

Есть ли способ решить это?Я считаю, что это потому, что я что-то упустил, но не могу понять это и не нашел ничего похожего на то, что происходит со мной в Google / здесь.

1 Ответ

0 голосов
/ 22 января 2019

Это просто:

go doc color.RGBA

цвет упаковки // импорт "изображение / цвет"

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

RGBA представляет собой традиционный 32-битный альфа-предварительно умноженный цвет, имеющий 8 биты для каждого из красного, зеленого, синего и альфа.

Альфа-предварительно умноженный компонент цвета C был масштабирован альфа (A), поэтому имеет допустимые значения 0 <= C <= A. </p>

Возможно, вы ищете color.NRGBA.

(Всегда, действительно всегда, консультируйтесь с документацией соответствующих типов и функций. Всегда.)

...