# package color

`import "image/color"`

color包实现了基本色彩库。

## Variables

    var (
        Black       = Gray16{0}       // 黑色
        White       = Gray16{0xffff}  // 白色
        Transparent = Alpha16{0}      // 完全透明
        Opaque      = Alpha16{0xffff} // 完全不透明
    )

标准色彩。

## type Color

    type Color interface {
        // 方法返回预乘了alpha的红、绿、蓝色彩值和alpha通道值，范围都在[0, 0xFFFF]。
        // 返回值类型为uint32，这样当乘以接近0xFFFF的混合参数时，不会溢出。
        RGBA() (r, g, b, a uint32)
    }

实现了Color接口的类型可以将自身转化为预乘了alpha的16位通道的RGBA，转换可能会丢失色彩信息。

## type Model

    type Model interface {
        Convert(c Color) Color
    }

Model接口可以将任意Color接口转换为采用自身色彩模型的Color接口。转换可能会丢失色彩信息。

    var (
        RGBAModel    Model = ModelFunc(rgbaModel)
        RGBA64Model  Model = ModelFunc(rgba64Model)
        NRGBAModel   Model = ModelFunc(nrgbaModel)
        NRGBA64Model Model = ModelFunc(nrgba64Model)
        AlphaModel   Model = ModelFunc(alphaModel)
        Alpha16Model Model = ModelFunc(alpha16Model)
        GrayModel    Model = ModelFunc(grayModel)
        Gray16Model  Model = ModelFunc(gray16Model)
    )

Models接口返回标准的Color接口类型。

    var YCbCrModel Model = ModelFunc(yCbCrModel)

包变量YcbCrModel是Y'cbCr色彩模型的Model接口。

### func ModelFunc

    func ModelFunc(f func(Color) Color) Model

函数ModelFunc返回一个调用函数f实现色彩转换的Model接口。

## type Alpha

    type Alpha struct {
        A uint8
    }

Alpha类型代表一个8位的alpha通道（alpha通道表示透明度）。

### func (Alpha) RGBA

    func (c Alpha) RGBA() (r, g, b, a uint32)

## type Alpha16

    type Alpha16 struct {
        A uint16
    }

Alpha16类型代表一个16位的alpha通道。

### func (Alpha16) RGBA

    func (c Alpha16) RGBA() (r, g, b, a uint32)

## type Gray

    type Gray struct {
        Y uint8
    }

Gray类型代表一个8位的灰度色彩。

### func (Gray) RGBA

    func (c Gray) RGBA() (r, g, b, a uint32)

## type Gray16

    type Gray16 struct {
        Y uint16
    }

Gray16类型代表一个16位的灰度色彩。

### func (Gray16) RGBA

    func (c Gray16) RGBA() (r, g, b, a uint32)

## type RGBA

    type RGBA struct {
        R, G, B, A uint8
    }

RGBA类型代表传统的预乘了alpha通道的32位RGB色彩，Red、Green、Blue、Alpha各8位。

### func (RGBA) RGBA

    func (c RGBA) RGBA() (r, g, b, a uint32)

## type RGBA64

    type RGBA64 struct {
        R, G, B, A uint16
    }

RGBA64类型代表预乘了alpha通道的64位RGB色彩，Red、Green、Blue、Alpha各16位。

### func (RGBA64) RGBA

    func (c RGBA64) RGBA() (r, g, b, a uint32)

## type NRGBA

    type NRGBA struct {
        R, G, B, A uint8
    }

NRGBA类型代表没有预乘alpha通道的32位RGB色彩，Red、Green、Blue、Alpha各8位。

### func (NRGBA) RGBA

    func (c NRGBA) RGBA() (r, g, b, a uint32)

## type NRGBA64

    type NRGBA64 struct {
        R, G, B, A uint16
    }

NRGBA64类型代表没有预乘alpha通道的64位RGB色彩，Red、Green、Blue、Alpha各16位。

### func (NRGBA64) RGBA

    func (c NRGBA64) RGBA() (r, g, b, a uint32)

## type YCbCr

    type YCbCr struct {
        Y, Cb, Cr uint8
    }

YcbCr代表完全不透明的24位Y'CbCr色彩；每个色彩都有1个亮度成分和2个色度成分，分别用8位字节表示。

JPEG、VP8、MPEG家族和其他编码方式使用本色彩模型。这些编码通常将Y'CbCr 和YUV两个色彩模型等同使用（Y=Y'=黄、U=Cb=青、V=Cr=品红）。但严格来说，YUV模只用于模拟视频信号，Y'是经过伽玛校正的Y。RGB和Y'CbCr色彩模型之间的转换会丢失色彩信息。两个色彩模型之间的转换有多个存在细微区别的算法。本包采用JFIF算法，参见http://www.w3.org/Graphics/JPEG/jfif3.pdf

### func (YCbCr) RGBA

    func (c YCbCr) RGBA() (uint32, uint32, uint32, uint32)

## type Palette

    type Palette []Color

Palette类型代表一个色彩的调色板。

### func (Palette) Convert

    func (p Palette) Convert(c Color) Color

返回调色板中与色彩c在欧几里德RGB色彩空间最接近的色彩。（实现了Model接口）

### func (Palette) Index

    func (p Palette) Index(c Color) int

返回调色板中与色彩c在欧几里德RGB色彩空间最接近的色彩的索引。

## func RGBToYCbCr

    func RGBToYCbCr(r, g, b uint8) (uint8, uint8, uint8)

函数将RGB三原色转换为Y'CbCr三原色。

## func YCbCrToRGB

    func YCbCrToRGB(y, cb, cr uint8) (uint8, uint8, uint8)

函数将Y'CbCr三原色转换为RGB三原色。