43 lines
1 KiB
Go
43 lines
1 KiB
Go
package goeffects
|
|
|
|
// Package copied from https://github.com/markdaws/go-effects
|
|
|
|
import (
|
|
"fmt"
|
|
"runtime"
|
|
)
|
|
|
|
type pencil struct {
|
|
blurFactor int
|
|
}
|
|
|
|
func (p *pencil) Apply(img *Image, numRoutines int) (*Image, error) {
|
|
if !isOddInt(p.blurFactor) {
|
|
return nil, fmt.Errorf("blurFactor must be odd")
|
|
}
|
|
|
|
if numRoutines == 0 {
|
|
numRoutines = runtime.GOMAXPROCS(0)
|
|
}
|
|
|
|
inImg := img
|
|
if p.blurFactor != 0 {
|
|
var err error
|
|
gaussian := NewGaussian(p.blurFactor, 1)
|
|
inImg, err = gaussian.Apply(img, numRoutines)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
}
|
|
sobel := NewSobel(-1, true)
|
|
out, err := sobel.Apply(inImg, numRoutines)
|
|
return out, err
|
|
}
|
|
|
|
// NewPencil renders the input image as if it was drawn in pencil. It is simply
|
|
// an inverted Sobel image. You can specify the blurFactor, a value that must
|
|
// be odd, to blur the input image to get rid of the noise. This is the gaussian
|
|
// kernel size, larger numbers blur more but can significantly increase processing time.
|
|
func NewPencil(blurFactor int) Effect {
|
|
return &pencil{blurFactor: blurFactor}
|
|
}
|