为什么golang RGBA.RGBA()方法使用|和<<?
在golang颜色包中,有一个方法可以从RGBA对象获取r,g,b的值:
func (c RGBA) RGBA() (r,b,a uint32) { r = uint32(c.R) r |= r << 8 g = uint32(c.G) g |= g << 8 b = uint32(c.B) b |= b << 8 a = uint32(c.A) a |= a << 8 return } 如果我要实现这个简单的功能,我只是写这个 func (c RGBA) RGBA() (r,a uint32) { r = uint32(c.R) g = uint32(c.G) b = uint32(c.B) a = uint32(c.A) return } 什么原因r | = r<使用8?
从优秀的“
The Go image package”博客:
和
所以如果我们看一下颜色的位表示,值为c.R = 10101010,那么这个操作 r = uint32(c.R) r |= r << 8 有效地将第一个字节复制到第二个字节. 00000000000000000000000010101010 (r) | 00000000000000001010101000000000 (r << 8) -------------------------------------- 00000000000000001010101010101010 (r |= r << 8) 这相当于与因子0x101的乘法,并在范围[0,65535]中均匀分布所有256个可能的值. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |