我试图用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]