jst 12 лет назад
Родитель
Сommit
45368ad0cd
1 измененных файлов с 10 добавлено и 10 удалено
  1. 10 10
      filters.go

+ 10 - 10
filters.go

@@ -42,7 +42,7 @@ type filterModel struct {
 
 	// instead of blurring an image before downscaling to avoid aliasing,
 	// the filter is scaled by a factor which leads to a similar effect
-	factor float32
+	factorInv float32
 
 	// for optimized access to image points
 	converter
@@ -51,12 +51,12 @@ type filterModel struct {
 	tempRow []colorArray
 }
 
-func (f *filterModel) convolution1d(x float32, p []colorArray, factor float32) (c colorArray) {
+func (f *filterModel) convolution1d(x float32, p []colorArray) (c colorArray) {
 	var k float32
 	var sum float32 = 0
 
 	for j := range p {
-		k = f.kernel((x - float32(j)) / factor)
+		k = f.kernel((x - float32(j)) * f.factorInv)
 		sum += k
 		for i := range c {
 			c[i] += p[j][i] * k
@@ -79,7 +79,7 @@ func (f *filterModel) Interpolate(u float32, y int) color.RGBA64 {
 		f.at(uf+i, y, &f.tempRow[i])
 	}
 
-	c := f.convolution1d(u, f.tempRow, f.factor)
+	c := f.convolution1d(u, f.tempRow)
 	return color.RGBA64{
 		clampToUint16(c[0]),
 		clampToUint16(c[1]),
@@ -96,37 +96,37 @@ func createFilter(img image.Image, factor float32, size int, kernel func(float32
 	switch img.(type) {
 	default:
 		f = &filterModel{
-			kernel, factor,
+			kernel, 1. / factor,
 			&genericConverter{img},
 			make([]colorArray, sizeX),
 		}
 	case *image.RGBA:
 		f = &filterModel{
-			kernel, factor,
+			kernel, 1. / factor,
 			&rgbaConverter{img.(*image.RGBA)},
 			make([]colorArray, sizeX),
 		}
 	case *image.RGBA64:
 		f = &filterModel{
-			kernel, factor,
+			kernel, 1. / factor,
 			&rgba64Converter{img.(*image.RGBA64)},
 			make([]colorArray, sizeX),
 		}
 	case *image.Gray:
 		f = &filterModel{
-			kernel, factor,
+			kernel, 1. / factor,
 			&grayConverter{img.(*image.Gray)},
 			make([]colorArray, sizeX),
 		}
 	case *image.Gray16:
 		f = &filterModel{
-			kernel, factor,
+			kernel, 1. / factor,
 			&gray16Converter{img.(*image.Gray16)},
 			make([]colorArray, sizeX),
 		}
 	case *image.YCbCr:
 		f = &filterModel{
-			kernel, factor,
+			kernel, 1. / factor,
 			&ycbcrConverter{img.(*image.YCbCr)},
 			make([]colorArray, sizeX),
 		}