在高浪中,当像素值带有 alpha 值时,会导致颜色值发生变化。我在python中尝试了相同的代码。没关系!这是高浪脚本:newRgba := image.NewRGBA(image.Rect(0, 0, 1, 1)) //new imagenewRgba.SetRGBA(0, 0, color.RGBA{R: 55, G: 23, B: 14, A: 122}) // set pixel valuef, _ := os.Create("./save.png")defer f.Close()// save imagepng.Encode(f, newRgba)ff, _ := ioutil.ReadFile("./save.png") //read imagebbb := bytes.NewBuffer(ff)m, _, _ := image.Decode(bbb)R, G, B, A := m.At(0, 0).RGBA()fmt.Println(R>>8, G>>8, B>>8, A>>8,) // get {55 23 13 122} , it is wrong! Why not {55 23 14 122} ?这是蟒蛇脚本:from PIL import Imageimg = Image.new('RGBA', (1, 1), (55, 23, 14,122)) # set pixel valueimg.save('bg.png')im = Image.open('bg.png')pix = im.load()print(pix[0,0]) // get (55, 23, 14, 122)为什么在高浪获得的结果会改变?
1 回答
慕标5832272
TA贡献1966条经验 获得超4个赞
颜色。RGBA 代表一种阿尔法预乘颜色。对于预乘法颜色,alpha 分量表示 R/G/B 分量可以采用的最大值。因此,用阿尔法122表示白色。color.RGBA{122,122,122,122}
呜呜呜。解码返回未预乘的 。当显示像素类型时,这一点会更清晰。例如:image.NRGBA
fmt.Printf("%#v\n", m.At(0, 0))
// color.NRGBA{R:0xff, G:0xff, B:0xff, A:0x7a}您的示例在使用类型时将起作用。NRGBA
请参阅此运行示例:https://play.golang.org/p/69bvYQfkCA_P
Before: color.NRGBA: {55 23 14 122}
After: color.NRGBA: {55 23 14 122}- 1 回答
- 0 关注
- 131 浏览
添加回答
举报
0/150
提交
取消
