Пакет draw
Обзор
Пакет draw предоставляет функции композитинга изображений.
Для ознакомления с этим пакетом обратитесь к статье «The Go image/draw package»: https://golang.org/doc/articles/image_draw.html
Указатель
Примеры
Файлы пакета
draw.go
func Draw
func Draw(dst Image, r image.Rectangle, src image.Image, sp image.Point, op Op)
Draw вызывает DrawMask с маской nil.
func DrawMask
func DrawMask(dst Image, r image.Rectangle, src image.Image, sp image.Point, mask image.Image, mp image.Point, op Op)
DrawMask совмещает r.Min в dst с sp в src и mp в mask, а затем заменяет прямоугольник r в dst результатом композитинга Портера — Даффа. Маска nil обрабатывается как полностью непрозрачная.
type Drawer 1.2
Drawer содержит метод Draw.
type Drawer interface {
// Draw aligns r.Min in dst with sp in src and then replaces the
// rectangle r in dst with the result of drawing src on dst.
Draw(dst Image, r image.Rectangle, src image.Image, sp image.Point)
} FloydSteinberg — это Drawer, реализующий операцию Src Op с диффузией ошибки по алгоритму Флойда — Стейнберга.
var FloydSteinberg Drawer = floydSteinberg{} Пример (FloydSteinberg)
Код:
const width = 130
const height = 50
im := image.NewGray(image.Rectangle{Max: image.Point{X: width, Y: height}})
for x := 0; x < width; x++ {
for y := 0; y < height; y++ {
dist := math.Sqrt(math.Pow(float64(x-width/2), 2)/3+math.Pow(float64(y-height/2), 2)) / (height / 1.5) * 255
var gray uint8
if dist > 255 {
gray = 255
} else {
gray = uint8(dist)
}
im.SetGray(x, y, color.Gray{Y: 255 - gray})
}
}
pi := image.NewPaletted(im.Bounds(), []color.Color{
color.Gray{Y: 255},
color.Gray{Y: 160},
color.Gray{Y: 70},
color.Gray{Y: 35},
color.Gray{Y: 0},
})
draw.FloydSteinberg.Draw(pi, im.Bounds(), im, image.Point{})
shade := []string{" ", "░", "▒", "▓", "█"}
for i, p := range pi.Pix {
fmt.Print(shade[p])
if (i+1)%width == 0 {
fmt.Print("\n")
}
}
type Image
Image — это image.Image с методом Set для изменения отдельного пикселя.
type Image interface {
image.Image
Set(x, y int, c color.Color)
} type Op
Op — оператор композитинга Портера — Даффа.
type Op int
const (
// Over specifies ``(src in mask) over dst''.
Over Op = iota
// Src specifies ``src in mask''.
Src
) func (Op) Draw 1.2
func (op Op) Draw(dst Image, r image.Rectangle, src image.Image, sp image.Point)
Draw реализует интерфейс Drawer, вызывая функцию Draw с текущим оператором Op.
type Quantizer 1.2
Quantizer создает палитру для изображения.
type Quantizer interface {
// Quantize appends up to cap(p) - len(p) colors to p and returns the
// updated palette suitable for converting m to a paletted image.
Quantize(p color.Palette, m image.Image) color.Palette
} type RGBA64Image 1.17
RGBA64Image расширяет интерфейсы Image и image.RGBA64Image методом SetRGBA64 для изменения отдельного пикселя. SetRGBA64 эквивалентен вызову Set, но позволяет избежать выделений памяти (аллокаций) при преобразовании конкретных типов цвета в интерфейсный тип color.Color.
type RGBA64Image interface {
image.RGBA64Image
Set(x, y int, c color.Color)
SetRGBA64(x, y int, c color.RGBA64)
}
© Google, Inc.
Licensed under the Creative Commons Attribution License 3.0.
http://golang.org/pkg/image/draw/