使用Go修改png alpha通道会破坏图像颜色

时间:2017-06-05 02:38:42

标签: image go png rgba

我试图用Go的image / png包更改png RGBA值。我没有修改R,G或B的问题,但是当我改变alpha值时,图像"中断",其他值在没有明显模式的情况下发生变化。

如果我保持alpha通道不受影响,这一切都不会发生。

我用这种方式解码png:

img, err := png.Decode(file)
if (err != nil) {
    log.Fatal(err)
}
defer file.Close()

rgba := image.NewRGBA(img.Bounds())
draw.Draw(rgba, rgba.Bounds(), img, image.Point{0,0}, draw.Src)

然后我通过这种方式修改和编码图像:

rgba.Pix[0] = uint8(254)  // red channel of 1st pixel
rgba.Pix[1] = uint8(254)  // green channel of 1st pixel
rgba.Pix[2] = uint8(254)  // blue channel of 1st pixel
rgba.Pix[3] = uint8(254)  // alpha channel of 1st pixel

new_file, err := os.Create("new.png")
if (err != nil) {
    log.Fatal(err)
}
defer new_file.Close()

png.Encode(new_file, rgba)

这是2x2纯白图像的像素切片

[255 255 255 255 255 255 255 255 255 255 255 255 255 255 255 255]

,这是更改后的相同切片

[255 255 255 254 255 255 255 254 255 255 255 255 255 255 255 255]

我只修改了第一个像素。我对可能发生的事情毫无头绪。

提前致谢:)

编辑1

在相同的白色2x2图像上进行此更改

[255 254 254 254 254 255 255 254 254 254 254 254 254 254 255 255]

同时使用rgba.SetRGBA和rgba.Pix方式,我最终得到了这个

[0 254 254 254 254 0 0 254 254 254 254 254 254 254 255 255]

0 个答案:

没有答案