32 lines
780 B
Go
32 lines
780 B
Go
// Copyright 2011 The Graphics-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 graphics
|
|
|
|
import (
|
|
"code.google.com/p/graphics-go/graphics/interp"
|
|
"errors"
|
|
"image"
|
|
"image/draw"
|
|
)
|
|
|
|
// Scale produces a scaled version of the image using bilinear interpolation.
|
|
func Scale(dst draw.Image, src image.Image) error {
|
|
if dst == nil {
|
|
return errors.New("graphics: dst is nil")
|
|
}
|
|
if src == nil {
|
|
return errors.New("graphics: src is nil")
|
|
}
|
|
|
|
b := dst.Bounds()
|
|
srcb := src.Bounds()
|
|
if b.Empty() || srcb.Empty() {
|
|
return nil
|
|
}
|
|
sx := float64(b.Dx()) / float64(srcb.Dx())
|
|
sy := float64(b.Dy()) / float64(srcb.Dy())
|
|
return I.Scale(sx, sy).Transform(dst, src, interp.Bilinear)
|
|
}
|