limage - lcolor/gray.go
1 package lcolor
2
3 import "image/color"
4
5 // GrayAlpha represents a Gray color with an Alpha channel
6 type GrayAlpha struct {
7 Y, A uint8
8 }
9
10 // RGBA implements the color.Color interface
11 func (c GrayAlpha) RGBA() (r, g, b, a uint32) {
12 y := uint32(c.Y)
13 y |= y << 8
14 a = uint32(c.A)
15 y *= a
16 y /= 0xff
17 a |= a << 8
18 return y, y, y, a
19 }
20
21 // ToNRGBA converts the HSV color into the RGB colorspace
22 func (c GrayAlpha) ToNRGBA() color.NRGBA64 {
23 y := uint16(c.Y)
24 y |= y << 8
25 a := uint16(c.A)
26 a |= a << 8
27 return color.NRGBA64{y, y, y, a}
28 }
29
30 func grayAlphaColourModel(c color.Color) color.Color {
31 _, _, _, a := c.RGBA()
32 return GrayAlpha{
33 Y: color.GrayModel.Convert(c).(color.Gray).Y,
34 A: uint8(a >> 8),
35 }
36 }
37