# package draw

`import "image/draw"`

draw包提供了图像合成函数。参见：http://golang.org/doc/articles/image_draw.html

## type Quantizer

    type Quantizer interface {
        // Quantize方法向p中最多增加cap(p)-len(p)个色彩并返回修正后的调色板
        // 返回值更适合（可以更少失真的）将m转换为一个调色板类型的图像
        Quantize(p color.Palette, m image.Image) color.Palette
    }

Quantizer接口为一个图像生成调色板。

## type Image

    type Image interface {
        image.Image
        Set(x, y int, c color.Color)
    }

Image接口比image.Image接口多了Set方法，该方法用于修改单个像素的色彩。

## type Drawer

    type Drawer interface {
        // 对齐图像dst的r.Min和src的sp点，然后将src绘制到dst上的结果来替换矩形范围内的图像
        Draw(dst Image, r image.Rectangle, src image.Image, sp image.Point)
    }

Drawer包含Draw方法。

    var FloydSteinberg Drawer = floydSteinberg{}

FloydSteinberg是采用Src操作并实现了Floyd-Steinberg误差扩散算法的Drawer。

## type Op

    type Op int

Op是Porter-Duff合成的操作符。

    const (
        // 源图像透过遮罩后，覆盖在目标图像上（类似图层）
        Over Op  = iota
        // 源图像透过遮罩后，替换掉目标图像
        Src
    )

### func (Op) Draw

    func (op Op) Draw(dst Image, r image.Rectangle, src image.Image, sp image.Point)

Draw方法通过使用Op参数调用包的Draw函数实现了Drawer接口。

## func Draw

    func Draw(dst Image, r image.Rectangle, src image.Image, sp image.Point, op Op)

Draw函数使用nil的mask参数调用DrawMask函数。

## func DrawMask

    func DrawMask(dst Image, r image.Rectangle, src image.Image, sp image.Point, mask image.Image, mp image.Point, op Op)

对齐目标图像dst的矩形r左上角、源图像src的sp点、遮罩mask的mp点，根据op修改dst的r矩形区域内的内容，mask如果为nil则视为完全透明。