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++ { 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.