Center the resized image on the canvas, instead of shifting it slightly

This commit is contained in:
Jason Summers 2012-11-27 20:38:19 -05:00
parent 1169a8bfc3
commit 3d9094eb9e
2 changed files with 4 additions and 2 deletions

View File

@ -66,6 +66,8 @@ func Resize(width, height uint, img image.Image, interp InterpolationFunction) i
resizedImg := image.NewRGBA64(image.Rect(0, 0, int(oldWidth/scaleX), int(oldHeight/scaleY))) resizedImg := image.NewRGBA64(image.Rect(0, 0, int(oldWidth/scaleX), int(oldHeight/scaleY)))
b := resizedImg.Bounds() b := resizedImg.Bounds()
adjustX := 0.5 * ((oldWidth-1.0)/scaleX - float32(b.Dx()-1))
adjustY := 0.5 * ((oldHeight-1.0)/scaleY - float32(b.Dy()-1))
n := numJobs(b.Dy()) n := numJobs(b.Dy())
c := make(chan int, n) c := make(chan int, n)
@ -76,7 +78,7 @@ func Resize(width, height uint, img image.Image, interp InterpolationFunction) i
var color color.RGBA64 var color color.RGBA64
for y := b.Min.Y; y < b.Max.Y; y++ { for y := b.Min.Y; y < b.Max.Y; y++ {
for x := b.Min.X; x < b.Max.X; x++ { for x := b.Min.X; x < b.Max.X; x++ {
u, v = t.Eval(float32(x), float32(y)) u, v = t.Eval(float32(x)+adjustX, float32(y)+adjustY)
//resizedImg.SetRGBA64(x, y, filter.Interpolate(u, v)) //resizedImg.SetRGBA64(x, y, filter.Interpolate(u, v))
color = filter.Interpolate(u, v) color = filter.Interpolate(u, v)
i := resizedImg.PixOffset(x, y) i := resizedImg.PixOffset(x, y)

View File

@ -16,7 +16,7 @@ func init() {
func Test_Nearest(t *testing.T) { func Test_Nearest(t *testing.T) {
m := Resize(6, 0, img, NearestNeighbor) m := Resize(6, 0, img, NearestNeighbor)
if m.At(2, 2) == m.At(3, 3) { if m.At(1, 1) == m.At(2, 2) {
t.Fail() t.Fail()
} }
} }