From 77b1de7eecdddb6a66e6a4299eeaa173e53dad63 Mon Sep 17 00:00:00 2001 From: James Jackson-South Date: Thu, 7 Jan 2016 16:01:46 +1100 Subject: [PATCH] Use SIMD for matrix filters Former-commit-id: 761f7f956b7028c72747cc454aa4a2928065192c Former-commit-id: 2f8c22d90f290696f1141d3a7887d5d096a2f724 Former-commit-id: 91e457aea0f50327acc3d08eade1d359297b514b --- .../Filters/ColorMatrix/ColorMatrixFilter.cs | 11 ++--------- src/ImageProcessor/Numerics/Rectangle.cs | 8 ++++---- 2 files changed, 6 insertions(+), 13 deletions(-) diff --git a/src/ImageProcessor/Filters/ColorMatrix/ColorMatrixFilter.cs b/src/ImageProcessor/Filters/ColorMatrix/ColorMatrixFilter.cs index d26e59197..d63732751 100644 --- a/src/ImageProcessor/Filters/ColorMatrix/ColorMatrixFilter.cs +++ b/src/ImageProcessor/Filters/ColorMatrix/ColorMatrixFilter.cs @@ -60,15 +60,8 @@ namespace ImageProcessor.Filters color = Color.Expand(color); } - float sr = color.R; - float sg = color.G; - float sb = color.B; - - color.R = (sr * matrix.M11) + (sg * matrix.M21) + (sb * matrix.M31) + matrix.M41; - color.G = (sr * matrix.M12) + (sg * matrix.M22) + (sb * matrix.M32) + matrix.M42; - color.B = (sr * matrix.M13) + (sg * matrix.M23) + (sb * matrix.M33) + matrix.M43; - - return compand ? Color.Compress(color) : color; + Vector3 transformed = Vector3.Transform(color.ToVector3(), matrix); + return compand ? Color.Compress(new Color(transformed, color.A)) : new Color(transformed, color.A); } } } diff --git a/src/ImageProcessor/Numerics/Rectangle.cs b/src/ImageProcessor/Numerics/Rectangle.cs index 7d90af30b..42dcbe566 100644 --- a/src/ImageProcessor/Numerics/Rectangle.cs +++ b/src/ImageProcessor/Numerics/Rectangle.cs @@ -102,12 +102,12 @@ namespace ImageProcessor { get { - return (int)this.backingVector.W; + return (int)this.backingVector.Z; } set { - this.backingVector.W = value; + this.backingVector.Z = value; } } @@ -118,12 +118,12 @@ namespace ImageProcessor { get { - return (int)this.backingVector.Z; + return (int)this.backingVector.W; } set { - this.backingVector.Z = value; + this.backingVector.W = value; } }