47 lines
876 B
Go
47 lines
876 B
Go
package imageutils
|
|
|
|
import (
|
|
"image"
|
|
"image/color"
|
|
)
|
|
|
|
type rescaled struct {
|
|
src image.Image
|
|
scale int
|
|
}
|
|
|
|
// ColorModel implements image.Image interface
|
|
func (r rescaled) ColorModel() color.Model {
|
|
return r.src.ColorModel()
|
|
}
|
|
|
|
// Bounds implements image.Image interface
|
|
func (r rescaled) Bounds() image.Rectangle {
|
|
b := r.src.Bounds()
|
|
return image.Rectangle{
|
|
Min: image.Point{
|
|
X: b.Min.X,
|
|
Y: b.Min.Y,
|
|
},
|
|
Max: image.Point{
|
|
X: b.Max.X * r.scale,
|
|
Y: b.Max.Y * r.scale,
|
|
},
|
|
}
|
|
}
|
|
|
|
// At implements image.Image interface
|
|
func (r rescaled) At(x, y int) color.Color {
|
|
return r.src.At(x/r.scale, y/r.scale)
|
|
}
|
|
|
|
// Scale scales image.Image to a given scale
|
|
// and then returns image.Image.
|
|
// For now it will work only with positive integers.
|
|
func Scale(img image.Image, scale int) image.Image {
|
|
if scale < 1 {
|
|
scale = 1
|
|
}
|
|
return rescaled{img, scale}
|
|
}
|