From 3d9094eb9e63d307bb33e0cff96b7e88e1faf8a0 Mon Sep 17 00:00:00 2001 From: Jason Summers Date: Tue, 27 Nov 2012 20:38:19 -0500 Subject: [PATCH] Center the resized image on the canvas, instead of shifting it slightly --- resize.go | 4 +++- resize_test.go | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/resize.go b/resize.go index 7fd2ec9..4278760 100644 --- a/resize.go +++ b/resize.go @@ -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))) 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()) c := make(chan int, n) @@ -76,7 +78,7 @@ func Resize(width, height uint, img image.Image, interp InterpolationFunction) i var color color.RGBA64 for y := b.Min.Y; y < b.Max.Y; y++ { 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)) color = filter.Interpolate(u, v) i := resizedImg.PixOffset(x, y) diff --git a/resize_test.go b/resize_test.go index b747514..f66b6e4 100644 --- a/resize_test.go +++ b/resize_test.go @@ -16,7 +16,7 @@ func init() { func Test_Nearest(t *testing.T) { 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() } }