为了账号安全,请及时绑定邮箱和手机立即绑定

为什么选择高朗编码方法使颜色数据出错?

为什么选择高朗编码方法使颜色数据出错?

Go
慕的地8271018 2022-10-04 15:51:55
在高浪中,当像素值带有 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}



查看完整回答
反对 回复 2022-10-04
  • 1 回答
  • 0 关注
  • 131 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号