306b829431
This relies on type aliases, a language feature new in Go 1.9. The package documentation, in draw.go, explicitly gives the intent of this package: This package is a superset of and a drop-in replacement for the image/draw package in the standard library. Drop-in replacement means that I can replace all of my "image/draw" imports with "golang.org/x/image/draw", to access additional features in this package, and no further changes are required. That's mostly true, but not completely true unless we use type aliases. Without type aliases, users might need to import both "image/draw" and "golang.org/x/image/draw" in order to convert from two conceptually equivalent but different (from the compiler's point of view) types, such as from one draw.Op type to another draw.Op type, to satisfy some other interface or function signature. Change-Id: Ice6d000d49b019c2d8761739a904232e9cd01cae Reviewed-on: https://go-review.googlesource.com/36730 Run-TryBot: Nigel Tao <nigeltao@golang.org> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Rob Pike <r@golang.org> Reviewed-by: Russ Cox <rsc@golang.org>
44 lines
1.5 KiB
Go
44 lines
1.5 KiB
Go
// Copyright 2015 The Go Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
// Package draw provides image composition functions.
|
|
//
|
|
// See "The Go image/draw package" for an introduction to this package:
|
|
// http://golang.org/doc/articles/image_draw.html
|
|
//
|
|
// This package is a superset of and a drop-in replacement for the image/draw
|
|
// package in the standard library.
|
|
package draw
|
|
|
|
// This file, and the go1_*.go files, just contains the API exported by the
|
|
// image/draw package in the standard library. Other files in this package
|
|
// provide additional features.
|
|
|
|
import (
|
|
"image"
|
|
"image/draw"
|
|
)
|
|
|
|
// Draw calls DrawMask with a nil mask.
|
|
func Draw(dst Image, r image.Rectangle, src image.Image, sp image.Point, op Op) {
|
|
draw.Draw(dst, r, src, sp, draw.Op(op))
|
|
}
|
|
|
|
// DrawMask aligns r.Min in dst with sp in src and mp in mask and then
|
|
// replaces the rectangle r in dst with the result of a Porter-Duff
|
|
// composition. A nil mask is treated as opaque.
|
|
func DrawMask(dst Image, r image.Rectangle, src image.Image, sp image.Point, mask image.Image, mp image.Point, op Op) {
|
|
draw.DrawMask(dst, r, src, sp, mask, mp, draw.Op(op))
|
|
}
|
|
|
|
// FloydSteinberg is a Drawer that is the Src Op with Floyd-Steinberg error
|
|
// diffusion.
|
|
var FloydSteinberg Drawer = floydSteinberg{}
|
|
|
|
type floydSteinberg struct{}
|
|
|
|
func (floydSteinberg) Draw(dst Image, r image.Rectangle, src image.Image, sp image.Point) {
|
|
draw.FloydSteinberg.Draw(dst, r, src, sp)
|
|
}
|