Просмотр исходного кода

Resolve image artifacts due to wrong coefficient index lookup.

jst 11 лет назад
Родитель
Сommit
0c6a628df5
2 измененных файлов с 12 добавлено и 12 удалено
  1. 7 7
      converter.go
  2. 5 5
      nearest.go

+ 7 - 7
converter.go

@@ -49,7 +49,7 @@ func resizeGeneric(in image.Image, out *image.RGBA64, scale float64, coeffs []in
 			var rgba [4]int64
 			var sum int64
 			start := offset[y]
-			ci := (y - newBounds.Min.Y) * filterLength
+			ci := y * filterLength
 			for i := 0; i < filterLength; i++ {
 				coeff := coeffs[ci+i]
 				if coeff != 0 {
@@ -96,7 +96,7 @@ func resizeRGBA(in *image.RGBA, out *image.RGBA, scale float64, coeffs []int16,
 			var rgba [4]int32
 			var sum int32
 			start := offset[y]
-			ci := (y - newBounds.Min.Y) * filterLength
+			ci := y * filterLength
 			for i := 0; i < filterLength; i++ {
 				coeff := coeffs[ci+i]
 				if coeff != 0 {
@@ -136,7 +136,7 @@ func resizeRGBA64(in *image.RGBA64, out *image.RGBA64, scale float64, coeffs []i
 			var rgba [4]int64
 			var sum int64
 			start := offset[y]
-			ci := (y - newBounds.Min.Y) * filterLength
+			ci := y * filterLength
 			for i := 0; i < filterLength; i++ {
 				coeff := coeffs[ci+i]
 				if coeff != 0 {
@@ -184,7 +184,7 @@ func resizeGray(in *image.Gray, out *image.Gray, scale float64, coeffs []int16,
 			var gray int32
 			var sum int32
 			start := offset[y]
-			ci := (y - newBounds.Min.Y) * filterLength
+			ci := y * filterLength
 			for i := 0; i < filterLength; i++ {
 				coeff := coeffs[ci+i]
 				if coeff != 0 {
@@ -216,7 +216,7 @@ func resizeGray16(in *image.Gray16, out *image.Gray16, scale float64, coeffs []i
 			var gray int64
 			var sum int64
 			start := offset[y]
-			ci := (y - newBounds.Min.Y) * filterLength
+			ci := y * filterLength
 			for i := 0; i < filterLength; i++ {
 				coeff := coeffs[ci+i]
 				if coeff != 0 {
@@ -252,7 +252,7 @@ func resizeYCbCr(in *ycc, out *ycc, scale float64, coeffs []int16, offset []int,
 			var p [3]int32
 			var sum int32
 			start := offset[y]
-			ci := (y - newBounds.Min.Y) * filterLength
+			ci := y * filterLength
 			for i := 0; i < filterLength; i++ {
 				coeff := coeffs[ci+i]
 				if coeff != 0 {
@@ -290,7 +290,7 @@ func nearestYCbCr(in *ycc, out *ycc, scale float64, coeffs []bool, offset []int,
 			var p [3]float32
 			var sum float32
 			start := offset[y]
-			ci := (y - newBounds.Min.Y) * filterLength
+			ci := y * filterLength
 			for i := 0; i < filterLength; i++ {
 				if coeffs[ci+i] {
 					xi := start + i

+ 5 - 5
nearest.go

@@ -43,7 +43,7 @@ func nearestGeneric(in image.Image, out *image.RGBA64, scale float64, coeffs []b
 			var rgba [4]float32
 			var sum float32
 			start := offset[y]
-			ci := (y - newBounds.Min.Y) * filterLength
+			ci := y * filterLength
 			for i := 0; i < filterLength; i++ {
 				if coeffs[ci+i] {
 					xi := start + i
@@ -89,7 +89,7 @@ func nearestRGBA(in *image.RGBA, out *image.RGBA, scale float64, coeffs []bool,
 			var rgba [4]float32
 			var sum float32
 			start := offset[y]
-			ci := (y - newBounds.Min.Y) * filterLength
+			ci := y * filterLength
 			for i := 0; i < filterLength; i++ {
 				if coeffs[ci+i] {
 					xi := start + i
@@ -128,7 +128,7 @@ func nearestRGBA64(in *image.RGBA64, out *image.RGBA64, scale float64, coeffs []
 			var rgba [4]float32
 			var sum float32
 			start := offset[y]
-			ci := (y - newBounds.Min.Y) * filterLength
+			ci := y * filterLength
 			for i := 0; i < filterLength; i++ {
 				if coeffs[ci+i] {
 					xi := start + i
@@ -175,7 +175,7 @@ func nearestGray(in *image.Gray, out *image.Gray, scale float64, coeffs []bool,
 			var gray float32
 			var sum float32
 			start := offset[y]
-			ci := (y - newBounds.Min.Y) * filterLength
+			ci := y * filterLength
 			for i := 0; i < filterLength; i++ {
 				if coeffs[ci+i] {
 					xi := start + i
@@ -206,7 +206,7 @@ func nearestGray16(in *image.Gray16, out *image.Gray16, scale float64, coeffs []
 			var gray float32
 			var sum float32
 			start := offset[y]
-			ci := (y - newBounds.Min.Y) * filterLength
+			ci := y * filterLength
 			for i := 0; i < filterLength; i++ {
 				if coeffs[ci+i] {
 					xi := start + i