Browse Source

Use SIMD for matrix filters

Former-commit-id: 761f7f956b7028c72747cc454aa4a2928065192c
Former-commit-id: 2f8c22d90f290696f1141d3a7887d5d096a2f724
Former-commit-id: 91e457aea0f50327acc3d08eade1d359297b514b
af/merge-core
James Jackson-South 10 years ago
parent
commit
77b1de7eec
  1. 11
      src/ImageProcessor/Filters/ColorMatrix/ColorMatrixFilter.cs
  2. 8
      src/ImageProcessor/Numerics/Rectangle.cs

11
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);
}
}
}

8
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;
}
}

Loading…
Cancel
Save