From 9b6f4595fb602e822d118f790d361094d43fc85f Mon Sep 17 00:00:00 2001 From: Nigel Tao Date: Tue, 17 Mar 2015 10:57:00 +1100 Subject: [PATCH] draw: actually use type-specific Transform code paths. I simply forgot to do this in the previous change. Change-Id: I0ea5d6bb0a09154cb995a665476ffceb155bd49e Reviewed-on: https://go-review.googlesource.com/7651 Reviewed-by: Rob Pike --- draw/gen.go | 2 +- draw/impl.go | 46 ++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 45 insertions(+), 3 deletions(-) diff --git a/draw/gen.go b/draw/gen.go index 587b969..ced1c9a 100644 --- a/draw/gen.go +++ b/draw/gen.go @@ -444,7 +444,7 @@ const ( return } d2s := invert(s2d) - z.transform_Image_Image(dst, dr, adr, &d2s, src, sr) + $switch z.transform_$dTypeRN_$sTypeRN(dst, dr, adr, &d2s, src, sr) } ` diff --git a/draw/impl.go b/draw/impl.go index cba9349..e6f215a 100644 --- a/draw/impl.go +++ b/draw/impl.go @@ -55,7 +55,28 @@ func (z nnInterpolator) Transform(dst Image, s2d *f64.Aff3, src image.Image, sr return } d2s := invert(s2d) - z.transform_Image_Image(dst, dr, adr, &d2s, src, sr) + switch dst := dst.(type) { + case *image.RGBA: + switch src := src.(type) { + case *image.Gray: + z.transform_RGBA_Gray(dst, dr, adr, &d2s, src, sr) + case *image.NRGBA: + z.transform_RGBA_NRGBA(dst, dr, adr, &d2s, src, sr) + case *image.RGBA: + z.transform_RGBA_RGBA(dst, dr, adr, &d2s, src, sr) + case *image.Uniform: + z.transform_RGBA_Uniform(dst, dr, adr, &d2s, src, sr) + case *image.YCbCr: + z.transform_RGBA_YCbCr(dst, dr, adr, &d2s, src, sr) + default: + z.transform_RGBA_Image(dst, dr, adr, &d2s, src, sr) + } + default: + switch src := src.(type) { + default: + z.transform_Image_Image(dst, dr, adr, &d2s, src, sr) + } + } } func (nnInterpolator) scale_RGBA_Gray(dst *image.RGBA, dr, adr image.Rectangle, src *image.Gray, sr image.Rectangle) { @@ -388,7 +409,28 @@ func (z ablInterpolator) Transform(dst Image, s2d *f64.Aff3, src image.Image, sr return } d2s := invert(s2d) - z.transform_Image_Image(dst, dr, adr, &d2s, src, sr) + switch dst := dst.(type) { + case *image.RGBA: + switch src := src.(type) { + case *image.Gray: + z.transform_RGBA_Gray(dst, dr, adr, &d2s, src, sr) + case *image.NRGBA: + z.transform_RGBA_NRGBA(dst, dr, adr, &d2s, src, sr) + case *image.RGBA: + z.transform_RGBA_RGBA(dst, dr, adr, &d2s, src, sr) + case *image.Uniform: + z.transform_RGBA_Uniform(dst, dr, adr, &d2s, src, sr) + case *image.YCbCr: + z.transform_RGBA_YCbCr(dst, dr, adr, &d2s, src, sr) + default: + z.transform_RGBA_Image(dst, dr, adr, &d2s, src, sr) + } + default: + switch src := src.(type) { + default: + z.transform_Image_Image(dst, dr, adr, &d2s, src, sr) + } + } } func (ablInterpolator) scale_RGBA_Gray(dst *image.RGBA, dr, adr image.Rectangle, src *image.Gray, sr image.Rectangle) {