From 0feec0664524f62666d0ad19f7c608ebd3d6a51e Mon Sep 17 00:00:00 2001 From: disintegration Date: Thu, 19 Mar 2015 22:52:55 +0300 Subject: [PATCH 1/2] Dst pixel coordinate fix --- filters.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/filters.go b/filters.go index ad56031..4ce04e3 100644 --- a/filters.go +++ b/filters.go @@ -87,7 +87,7 @@ func createWeights8(dy, filterLength int, blur, scale float64, kernel func(float coeffs := make([]int16, dy*filterLength) start := make([]int, dy) for y := 0; y < dy; y++ { - interpX := scale * (float64(y) + 0.5) + interpX := scale*(float64(y)+0.5) - 0.5 start[y] = int(interpX) - filterLength/2 + 1 interpX -= float64(start[y]) for i := 0; i < filterLength; i++ { @@ -107,7 +107,7 @@ func createWeights16(dy, filterLength int, blur, scale float64, kernel func(floa coeffs := make([]int32, dy*filterLength) start := make([]int, dy) for y := 0; y < dy; y++ { - interpX := scale * (float64(y) + 0.5) + interpX := scale*(float64(y)+0.5) - 0.5 start[y] = int(interpX) - filterLength/2 + 1 interpX -= float64(start[y]) for i := 0; i < filterLength; i++ { @@ -126,7 +126,7 @@ func createWeightsNearest(dy, filterLength int, blur, scale float64) ([]bool, [] coeffs := make([]bool, dy*filterLength) start := make([]int, dy) for y := 0; y < dy; y++ { - interpX := scale * (float64(y) + 0.5) + interpX := scale*(float64(y)+0.5) - 0.5 start[y] = int(interpX) - filterLength/2 + 1 interpX -= float64(start[y]) for i := 0; i < filterLength; i++ { From 618f7ff07aa13afd3aa9c9d2533a9917e0f3b8c4 Mon Sep 17 00:00:00 2001 From: jst Date: Fri, 27 Mar 2015 19:48:18 +0100 Subject: [PATCH 2/2] Add test case for correct pixel coordinates after resize. --- resize_test.go | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/resize_test.go b/resize_test.go index 3ba03f2..efe3fa0 100644 --- a/resize_test.go +++ b/resize_test.go @@ -85,6 +85,26 @@ func Test_SameSizeReturnsOriginal(t *testing.T) { } } +func Test_PixelCoordinates(t *testing.T) { + checkers := image.NewGray(image.Rect(0, 0, 4, 4)) + checkers.Pix = []uint8{ + 255, 0, 255, 0, + 0, 255, 0, 255, + 255, 0, 255, 0, + 0, 255, 0, 255, + } + + resized := Resize(12, 12, checkers, NearestNeighbor).(*image.Gray) + + if resized.Pix[0] != 255 || resized.Pix[1] != 255 || resized.Pix[2] != 255 { + t.Fail() + } + + if resized.Pix[3] != 0 || resized.Pix[4] != 0 || resized.Pix[5] != 0 { + t.Fail() + } +} + const ( // Use a small image size for benchmarks. We don't want memory performance // to affect the benchmark results.