package filters import ( "image" "image/draw" "image/color" "github.com/disintegration/gift" ) type UpscaleFilter struct { Size image.Rectangle PixelWidth int } func Upscale(size image.Rectangle, width int) gift.Filter { return UpscaleFilter{size, width} } func (filter UpscaleFilter) Bounds(src image.Rectangle) (dst_bounds image.Rectangle) { return filter.Size } func (filter UpscaleFilter) Draw(dst draw.Image, src image.Image, _ *gift.Options) { var from_x, from_y int var from color.Color bounds := filter.Size for y := bounds.Min.Y; y < bounds.Max.Y; y++ { for x := bounds.Min.X; x < bounds.Max.X; x++ { if x % filter.PixelWidth == 0 { from_x = x / filter.PixelWidth from_y = y / filter.PixelWidth from = src.At(from_x, from_y) } dst.Set(x, y, from) } } }