小切片容量居然能带来这么大的性能优化 以下是手写图像合成时AlphaBlend过程代码片段: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 for x := range width { // 参考:image/draw/draw.go // “Small cap improves performance” // 从每帧2.6ms降到1.7ms。 s := src[x*4 : x*4+4] d := dst[x*4 : x*4+4] a := s[3] switch { case a == 255: // copy(d, s[:4]) *(*uint32)(unsafe.Pointer(&d[0])) = *(*uint32)(unsafe.Pointer(&s[0])) case a != 0: i := 255 - a d[0] = uint8((int(s[0])*int(a) + int(d[0])*int(i)) / 255) d[1] = uint8((int(s[1])*int(a) + int(d[1])*int(i)) / 255) d[2] = uint8((int(s[2])*int(a) + int(d[2])*int(i)) / 255) d[3] = 255 } } 参考了标准库的写法:https://github.com/golang/go/blob/9d8bad3bbd88ed75a6ea4a20fa633ede9d1bb0d9/src/image/draw/draw.go#L460 陪她去流浪 碎碎念 桃子 1小时前