2 回答

TA貢獻(xiàn)1789條經(jīng)驗 獲得超10個贊
Color.RGBA()
返回 范圍內(nèi)的顏色分量0..0xffff
,而不是 范圍內(nèi)的顏色分量0..0xff
:
// RGBA returns the alpha-premultiplied red, green, blue and alpha values
// for the color. Each value ranges within [0, 0xffff], but is represented
// by a uint32 so that multiplying by a blend factor up to 0xffff will not
// overflow.
因此,在構(gòu)造要繪制的顏色時,您必須右移所有 16 位分量(8 位),而不僅僅是轉(zhuǎn)換為,uint8因為該轉(zhuǎn)換保留了最低 8 位,與 16 位值相比,這可能是“隨機(jī)”的,并且您需要高 8 位:
realColor?:=?color.RGBA{ ????R:?uint8(R>>8), ????G:?uint8(G>>8), ????B:?uint8(B>>8), ????A:?uint8(A>>8), }

TA貢獻(xiàn)1804條經(jīng)驗 獲得超3個贊
似乎這個問題也與color.RGBA
- 如果我將其與 alpha 一起使用,而不是255
在生成的 PNG 中得到奇怪的顏色。在我切換到color.NRGBA
(按照接受的答案中的建議)之后,我得到了正確的顏色渲染。
所以不要使用
newColor := color.RGBA{ R: uint8(R>>8), G: uint8(G>>8), B: uint8(B>>8), A: uint8(A>>8), }
反而
newColor := color.NRGBA{ R: uint8(R>>8), G: uint8(G>>8), B: uint8(B>>8), A: uint8(A>>8), }
- 2 回答
- 0 關(guān)注
- 199 瀏覽
添加回答
舉報