diff --git a/src/ImageSharp.Drawing/project.json b/src/ImageSharp.Drawing/project.json
index ece92f438e..a73dee21b5 100644
--- a/src/ImageSharp.Drawing/project.json
+++ b/src/ImageSharp.Drawing/project.json
@@ -51,7 +51,6 @@
"type": "build"
},
"System.Buffers": "4.0.0",
- "System.Numerics.Vectors": "4.1.1",
"System.Runtime.CompilerServices.Unsafe": "4.0.0"
},
"frameworks": {
@@ -63,6 +62,7 @@
"System.IO": "4.1.0",
"System.IO.Compression": "4.1.0",
"System.Linq": "4.1.0",
+ "System.Numerics.Vectors": "4.1.1",
"System.ObjectModel": "4.0.12",
"System.Resources.ResourceManager": "4.0.1",
"System.Runtime.Extensions": "4.1.0",
@@ -76,7 +76,21 @@
},
"net45": {
"dependencies": {
- "System.Runtime": "4.0.0"
+ "System.Numerics.Vectors": "4.1.1",
+ "System.Threading.Tasks.Parallel": "4.0.0"
+ },
+ "frameworkAssemblies": {
+ "System.Runtime": "4.0.0.0"
+ }
+ },
+ "net461": {
+ "dependencies": {
+ "System.Threading.Tasks.Parallel": "4.0.0"
+ },
+ "frameworkAssemblies": {
+ "System.Runtime": "4.0.20.0",
+ "System.Numerics": "4.0.0.0",
+ "System.Numerics.Vectors": "4.0.0.0"
}
}
}
diff --git a/src/ImageSharp.Formats.Bmp/project.json b/src/ImageSharp.Formats.Bmp/project.json
index 4ed92c7e5b..fe7f487e95 100644
--- a/src/ImageSharp.Formats.Bmp/project.json
+++ b/src/ImageSharp.Formats.Bmp/project.json
@@ -47,7 +47,6 @@
"type": "build"
},
"System.Buffers": "4.0.0",
- "System.Numerics.Vectors": "4.1.1",
"System.Runtime.CompilerServices.Unsafe": "4.0.0"
},
"frameworks": {
@@ -59,6 +58,7 @@
"System.IO": "4.1.0",
"System.IO.Compression": "4.1.0",
"System.Linq": "4.1.0",
+ "System.Numerics.Vectors": "4.1.1",
"System.ObjectModel": "4.0.12",
"System.Resources.ResourceManager": "4.0.1",
"System.Runtime.Extensions": "4.1.0",
@@ -72,9 +72,21 @@
},
"net45": {
"dependencies": {
- "System.Runtime": "4.0.0",
- "System.IO": "4.0.0",
+ "System.Numerics.Vectors": "4.1.1",
"System.Threading.Tasks.Parallel": "4.0.0"
+ },
+ "frameworkAssemblies": {
+ "System.Runtime": "4.0.0.0"
+ }
+ },
+ "net461": {
+ "dependencies": {
+ "System.Threading.Tasks.Parallel": "4.0.0"
+ },
+ "frameworkAssemblies": {
+ "System.Runtime": "4.0.20.0",
+ "System.Numerics": "4.0.0.0",
+ "System.Numerics.Vectors": "4.0.0.0"
}
}
}
diff --git a/src/ImageSharp.Formats.Gif/project.json b/src/ImageSharp.Formats.Gif/project.json
index c0710a3e40..395ea77b8d 100644
--- a/src/ImageSharp.Formats.Gif/project.json
+++ b/src/ImageSharp.Formats.Gif/project.json
@@ -47,7 +47,6 @@
"type": "build"
},
"System.Buffers": "4.0.0",
- "System.Numerics.Vectors": "4.1.1",
"System.Runtime.CompilerServices.Unsafe": "4.0.0"
},
"frameworks": {
@@ -59,6 +58,7 @@
"System.IO": "4.1.0",
"System.IO.Compression": "4.1.0",
"System.Linq": "4.1.0",
+ "System.Numerics.Vectors": "4.1.1",
"System.ObjectModel": "4.0.12",
"System.Resources.ResourceManager": "4.0.1",
"System.Runtime.Extensions": "4.1.0",
@@ -72,9 +72,21 @@
},
"net45": {
"dependencies": {
- "System.Runtime": "4.0.0",
- "System.IO": "4.0.0",
+ "System.Numerics.Vectors": "4.1.1",
"System.Threading.Tasks.Parallel": "4.0.0"
+ },
+ "frameworkAssemblies": {
+ "System.Runtime": "4.0.0.0"
+ }
+ },
+ "net461": {
+ "dependencies": {
+ "System.Threading.Tasks.Parallel": "4.0.0"
+ },
+ "frameworkAssemblies": {
+ "System.Runtime": "4.0.20.0",
+ "System.Numerics": "4.0.0.0",
+ "System.Numerics.Vectors": "4.0.0.0"
}
}
}
diff --git a/src/ImageSharp.Formats.Jpeg/Components/Block8x8F.cs b/src/ImageSharp.Formats.Jpeg/Components/Block8x8F.cs
index 5ba7599570..13475af09e 100644
--- a/src/ImageSharp.Formats.Jpeg/Components/Block8x8F.cs
+++ b/src/ImageSharp.Formats.Jpeg/Components/Block8x8F.cs
@@ -377,23 +377,6 @@ namespace ImageSharp.Formats.Jpg
}
}
- ///
- /// Performs division and rounding of a rational number represented by a dividend and a divisior into an integer.
- ///
- /// The dividend
- /// The divisor
- /// The result integer
- [MethodImpl(MethodImplOptions.AggressiveInlining)]
- private static int DivideRound(int dividend, int divisor)
- {
- if (dividend >= 0)
- {
- return (dividend + (divisor >> 1)) / divisor;
- }
-
- return -((-dividend + (divisor >> 1)) / divisor);
- }
-
[MethodImpl(MethodImplOptions.AggressiveInlining)]
private static void DivideRoundAll(ref Block8x8F a, ref Block8x8F b)
{
@@ -418,9 +401,11 @@ namespace ImageSharp.Formats.Jpg
[MethodImpl(MethodImplOptions.AggressiveInlining)]
private static Vector4 DivideRound(Vector4 dividend, Vector4 divisor)
{
+ // sign(v) = max(min(v, 1), -1)
Vector4 sign = Vector4.Min(dividend, Vector4.One);
sign = Vector4.Max(sign, new Vector4(-1));
+ // AlmostRound(dividend/divisor) = dividend/divisior + 0.5*sign(dividend)
return (dividend / divisor) + (sign * new Vector4(0.5f));
}
}
diff --git a/src/ImageSharp.Formats.Jpeg/JpegEncoder.cs b/src/ImageSharp.Formats.Jpeg/JpegEncoder.cs
index a672949c35..6f404c9bb3 100644
--- a/src/ImageSharp.Formats.Jpeg/JpegEncoder.cs
+++ b/src/ImageSharp.Formats.Jpeg/JpegEncoder.cs
@@ -63,7 +63,13 @@ namespace ImageSharp.Formats
///
public void Encode(Image image, Stream stream)
where TColor : struct, IPackedPixel, IEquatable
- {
+ {
+ // Ensure that quality can be set but has a fallback.
+ if (image.Quality > 0)
+ {
+ this.Quality = image.Quality;
+ }
+
JpegEncoderCore encode = new JpegEncoderCore();
if (this.subsampleSet)
{
@@ -71,8 +77,8 @@ namespace ImageSharp.Formats
}
else
{
- // Match Photoshop and use 4:2:0 SUpsampling at quality < 51%
- encode.Encode(image, stream, this.Quality, this.Quality >= 51 ? JpegSubsample.Ratio444 : JpegSubsample.Ratio420);
+ // Use 4:2:0 Subsampling at quality < 91% for reduced filesize.
+ encode.Encode(image, stream, this.Quality, this.Quality >= 91 ? JpegSubsample.Ratio444 : JpegSubsample.Ratio420);
}
}
}
diff --git a/src/ImageSharp.Formats.Jpeg/project.json b/src/ImageSharp.Formats.Jpeg/project.json
index 6366f507e8..e0fdeeef25 100644
--- a/src/ImageSharp.Formats.Jpeg/project.json
+++ b/src/ImageSharp.Formats.Jpeg/project.json
@@ -47,7 +47,6 @@
"type": "build"
},
"System.Buffers": "4.0.0",
- "System.Numerics.Vectors": "4.1.1",
"System.Runtime.CompilerServices.Unsafe": "4.0.0"
},
"frameworks": {
@@ -59,6 +58,7 @@
"System.IO": "4.1.0",
"System.IO.Compression": "4.1.0",
"System.Linq": "4.1.0",
+ "System.Numerics.Vectors": "4.1.1",
"System.ObjectModel": "4.0.12",
"System.Resources.ResourceManager": "4.0.1",
"System.Runtime.Extensions": "4.1.0",
@@ -72,9 +72,21 @@
},
"net45": {
"dependencies": {
- "System.Runtime": "4.0.0",
- "System.IO": "4.0.0",
+ "System.Numerics.Vectors": "4.1.1",
"System.Threading.Tasks.Parallel": "4.0.0"
+ },
+ "frameworkAssemblies": {
+ "System.Runtime": "4.0.0.0"
+ }
+ },
+ "net461": {
+ "dependencies": {
+ "System.Threading.Tasks.Parallel": "4.0.0"
+ },
+ "frameworkAssemblies": {
+ "System.Runtime": "4.0.20.0",
+ "System.Numerics": "4.0.0.0",
+ "System.Numerics.Vectors": "4.0.0.0"
}
}
}
diff --git a/src/ImageSharp.Formats.Png/project.json b/src/ImageSharp.Formats.Png/project.json
index bce68ddca5..17dac21713 100644
--- a/src/ImageSharp.Formats.Png/project.json
+++ b/src/ImageSharp.Formats.Png/project.json
@@ -47,7 +47,6 @@
"type": "build"
},
"System.Buffers": "4.0.0",
- "System.Numerics.Vectors": "4.1.1",
"System.Runtime.CompilerServices.Unsafe": "4.0.0"
},
"frameworks": {
@@ -59,6 +58,7 @@
"System.IO": "4.1.0",
"System.IO.Compression": "4.1.0",
"System.Linq": "4.1.0",
+ "System.Numerics.Vectors": "4.1.1",
"System.ObjectModel": "4.0.12",
"System.Resources.ResourceManager": "4.0.1",
"System.Runtime.Extensions": "4.1.0",
@@ -72,9 +72,21 @@
},
"net45": {
"dependencies": {
- "System.Runtime": "4.0.0",
- "System.IO": "4.0.0",
+ "System.Numerics.Vectors": "4.1.1",
"System.Threading.Tasks.Parallel": "4.0.0"
+ },
+ "frameworkAssemblies": {
+ "System.Runtime": "4.0.0.0"
+ }
+ },
+ "net461": {
+ "dependencies": {
+ "System.Threading.Tasks.Parallel": "4.0.0"
+ },
+ "frameworkAssemblies": {
+ "System.Runtime": "4.0.20.0",
+ "System.Numerics": "4.0.0.0",
+ "System.Numerics.Vectors": "4.0.0.0"
}
}
}
diff --git a/src/ImageSharp.Processing/project.json b/src/ImageSharp.Processing/project.json
index eb3ea59db6..9b96b53121 100644
--- a/src/ImageSharp.Processing/project.json
+++ b/src/ImageSharp.Processing/project.json
@@ -47,7 +47,6 @@
"type": "build"
},
"System.Buffers": "4.0.0",
- "System.Numerics.Vectors": "4.1.1",
"System.Runtime.CompilerServices.Unsafe": "4.0.0"
},
"frameworks": {
@@ -59,6 +58,7 @@
"System.IO": "4.1.0",
"System.IO.Compression": "4.1.0",
"System.Linq": "4.1.0",
+ "System.Numerics.Vectors": "4.1.1",
"System.ObjectModel": "4.0.12",
"System.Resources.ResourceManager": "4.0.1",
"System.Runtime.Extensions": "4.1.0",
@@ -72,9 +72,21 @@
},
"net45": {
"dependencies": {
- "System.Runtime": "4.0.0",
- "System.IO": "4.0.0",
+ "System.Numerics.Vectors": "4.1.1",
"System.Threading.Tasks.Parallel": "4.0.0"
+ },
+ "frameworkAssemblies": {
+ "System.Runtime": "4.0.0.0"
+ }
+ },
+ "net461": {
+ "dependencies": {
+ "System.Threading.Tasks.Parallel": "4.0.0"
+ },
+ "frameworkAssemblies": {
+ "System.Runtime": "4.0.20.0",
+ "System.Numerics": "4.0.0.0",
+ "System.Numerics.Vectors": "4.0.0.0"
}
}
}
diff --git a/src/ImageSharp/project.json b/src/ImageSharp/project.json
index 8ddaa8bcc2..28cb7b4099 100644
--- a/src/ImageSharp/project.json
+++ b/src/ImageSharp/project.json
@@ -43,7 +43,6 @@
"type": "build"
},
"System.Buffers": "4.0.0",
- "System.Numerics.Vectors": "4.1.1",
"System.Runtime.CompilerServices.Unsafe": "4.0.0"
},
"frameworks": {
@@ -55,6 +54,7 @@
"System.IO": "4.1.0",
"System.IO.Compression": "4.1.0",
"System.Linq": "4.1.0",
+ "System.Numerics.Vectors": "4.1.1",
"System.ObjectModel": "4.0.12",
"System.Resources.ResourceManager": "4.0.1",
"System.Runtime.Extensions": "4.1.0",
@@ -68,9 +68,21 @@
},
"net45": {
"dependencies": {
- "System.Runtime": "4.0.0",
- "System.IO": "4.0.0",
+ "System.Numerics.Vectors": "4.1.1",
"System.Threading.Tasks.Parallel": "4.0.0"
+ },
+ "frameworkAssemblies": {
+ "System.Runtime": "4.0.0.0"
+ }
+ },
+ "net461": {
+ "dependencies": {
+ "System.Threading.Tasks.Parallel": "4.0.0"
+ },
+ "frameworkAssemblies": {
+ "System.Runtime": "4.0.20.0",
+ "System.Numerics": "4.0.0.0",
+ "System.Numerics.Vectors": "4.0.0.0"
}
}
}
diff --git a/tests/ImageSharp.Benchmarks/project.json b/tests/ImageSharp.Benchmarks/project.json
index 10790bc156..8650a8af41 100644
--- a/tests/ImageSharp.Benchmarks/project.json
+++ b/tests/ImageSharp.Benchmarks/project.json
@@ -48,7 +48,7 @@
"ImageSharp.Benchmarks": "ImageSharp.Benchmarks"
},
"frameworks": {
- "net461": {
+ "net46": {
"dependencies": {
},
"frameworkAssemblies": {
diff --git a/tests/ImageSharp.Sandbox46/ImageSharp.Sandbox46.csproj b/tests/ImageSharp.Sandbox46/ImageSharp.Sandbox46.csproj
index 19ff65f1d6..d7c5d8eaad 100644
--- a/tests/ImageSharp.Sandbox46/ImageSharp.Sandbox46.csproj
+++ b/tests/ImageSharp.Sandbox46/ImageSharp.Sandbox46.csproj
@@ -38,10 +38,6 @@
-
- ..\..\packages\System.Numerics.Vectors.4.1.1\lib\net46\System.Numerics.Vectors.dll
- True
-
@@ -67,25 +63,25 @@
- ..\..\src\ImageSharp\bin\$(Configuration)\net45\ImageSharp.dll
+ ..\..\src\ImageSharp\bin\$(Configuration)\net461\ImageSharp.dll
- ..\..\src\ImageSharp.Drawing\bin\$(Configuration)\net45\ImageSharp.Drawing.dll
+ ..\..\src\ImageSharp.Drawing\bin\$(Configuration)\net461\ImageSharp.Drawing.dll
- ..\..\src\ImageSharp.Formats.Bmp\bin\$(Configuration)\net45\ImageSharp.Formats.Bmp.dll
+ ..\..\src\ImageSharp.Formats.Bmp\bin\$(Configuration)\net461\ImageSharp.Formats.Bmp.dll
- ..\..\src\ImageSharp.Formats.Gif\bin\$(Configuration)\net45\ImageSharp.Formats.Gif.dll
+ ..\..\src\ImageSharp.Formats.Gif\bin\$(Configuration)\net461\ImageSharp.Formats.Gif.dll
- ..\..\src\ImageSharp.Formats.Jpeg\bin\$(Configuration)\net45\ImageSharp.Formats.Jpeg.dll
+ ..\..\src\ImageSharp.Formats.Jpeg\bin\$(Configuration)\net461\ImageSharp.Formats.Jpeg.dll
- ..\..\src\ImageSharp.Formats.Png\bin\$(Configuration)\net45\ImageSharp.Formats.Png.dll
+ ..\..\src\ImageSharp.Formats.Png\bin\$(Configuration)\net461\ImageSharp.Formats.Png.dll
- ..\..\src\ImageSharp.Processing\bin\$(Configuration)\net45\ImageSharp.Processing.dll
+ ..\..\src\ImageSharp.Processing\bin\$(Configuration)\net461\ImageSharp.Processing.dll
diff --git a/tests/ImageSharp.Sandbox46/packages.config b/tests/ImageSharp.Sandbox46/packages.config
index 8163e6e2e8..8b4f34078a 100644
--- a/tests/ImageSharp.Sandbox46/packages.config
+++ b/tests/ImageSharp.Sandbox46/packages.config
@@ -1,6 +1,5 @@
-
diff --git a/tests/ImageSharp.Tests/Formats/Jpg/JpegTests.cs b/tests/ImageSharp.Tests/Formats/Jpg/JpegTests.cs
index d21a4edf75..650ef799ff 100644
--- a/tests/ImageSharp.Tests/Formats/Jpg/JpegTests.cs
+++ b/tests/ImageSharp.Tests/Formats/Jpg/JpegTests.cs
@@ -34,7 +34,7 @@ namespace ImageSharp.Tests
public void LoadResizeSave(TestImageProvider provider, int quality, JpegSubsample subsample)
where TColor : struct, IPackedPixel, IEquatable
{
- var image = provider.GetImage()
+ Image image = provider.GetImage()
.Resize(new ResizeOptions
{
Size = new Size(150, 100),
@@ -61,7 +61,7 @@ namespace ImageSharp.Tests
.Concat(new[] { TestImages.Jpeg.Calliphora, TestImages.Jpeg.Cmyk })
.ToArray();
- var testImages =
+ Image[] testImages =
testFiles.Select(
tf => TestImageProvider.File(tf, pixelTypeOverride: PixelTypes.StandardImageClass).GetImage())
.ToArray();
@@ -91,7 +91,7 @@ namespace ImageSharp.Tests
public void OpenJpeg_SaveBmp(TestImageProvider provider)
where TColor : struct, IPackedPixel, IEquatable
{
- var image = provider.GetImage();
+ Image image = provider.GetImage();
provider.Utility.SaveTestOutputFile(image, "bmp");
}
@@ -105,9 +105,9 @@ namespace ImageSharp.Tests
public void OpenBmp_SaveJpeg(TestImageProvider provider, JpegSubsample subSample, int quality)
where TColor : struct, IPackedPixel, IEquatable
{
- var image = provider.GetImage();
+ Image image = provider.GetImage();
- var utility = provider.Utility;
+ ImagingTestCaseUtility utility = provider.Utility;
utility.TestName += "_" + subSample + "_Q" + quality;
using (var outputStream = File.OpenWrite(utility.GetTestOutputFileName("jpg")))
@@ -152,6 +152,7 @@ namespace ImageSharp.Tests
{
Image img = new Image(bytes);
},
+ // ReSharper disable once ExplicitCallerInfoArgument
$"Decode {fileName}");
}
@@ -162,11 +163,11 @@ namespace ImageSharp.Tests
public void Benchmark_JpegEncoder(TestImageProvider provider, JpegSubsample subSample, int quality)
where TColor : struct, IPackedPixel, IEquatable
{
- var image = provider.GetImage();
+ Image image = provider.GetImage();
using (var outputStream = new MemoryStream())
{
- var encoder = new JpegEncoder()
+ JpegEncoder encoder = new JpegEncoder()
{
Subsample = subSample,
Quality = quality
@@ -185,7 +186,7 @@ namespace ImageSharp.Tests
{
Image image = factory.CreateImage(10, 10);
- using (var pixels = image.Lock())
+ using (PixelAccessor pixels = image.Lock())
{
for (int i = 0; i < 10; i++)
{
@@ -208,10 +209,10 @@ namespace ImageSharp.Tests
public void CopyStretchedRGBTo_FromOrigo(TestImageProvider provider)
where TColor : struct, IPackedPixel, IEquatable
{
- var src = provider.GetImage();
+ Image src = provider.GetImage();
PixelArea area = new PixelArea(8, 8, ComponentOrder.Xyz);
- var dest = provider.Factory.CreateImage(8, 8);
+ Image dest = provider.Factory.CreateImage(8, 8);
using (var s = src.Lock())
{
@@ -233,12 +234,12 @@ namespace ImageSharp.Tests
public void CopyStretchedRGBTo_WithOffset(TestImageProvider provider)
where TColor : struct, IPackedPixel, IEquatable
{
- var src = provider.GetImage();
+ Image src = provider.GetImage();
PixelArea area = new PixelArea(8, 8, ComponentOrder.Xyz);
- var dest = provider.Factory.CreateImage(8, 8);
+ Image dest = provider.Factory.CreateImage(8, 8);
- using (var s = src.Lock())
+ using (PixelAccessor s = src.Lock())
{
using (var d = dest.Lock())
{
diff --git a/tests/ImageSharp.Tests/Formats/Jpg/ReferenceImplementations.cs b/tests/ImageSharp.Tests/Formats/Jpg/ReferenceImplementations.cs
index 06882719c9..e76a11cec9 100644
--- a/tests/ImageSharp.Tests/Formats/Jpg/ReferenceImplementations.cs
+++ b/tests/ImageSharp.Tests/Formats/Jpg/ReferenceImplementations.cs
@@ -21,7 +21,7 @@ namespace ImageSharp.Tests
internal static class ReferenceImplementations
{
///
- /// Transpose 8x8 block stored linearly in a span (inplace)
+ /// Transpose 8x8 block stored linearly in a (inplace)
///
///
internal static void Transpose8x8(MutableSpan data)
@@ -39,7 +39,7 @@ namespace ImageSharp.Tests
}
///
- /// Transpose 8x8 block stored linearly in a span
+ /// Transpose 8x8 block stored linearly in a
///
internal static void Transpose8x8(MutableSpan src, MutableSpan dest)
{
@@ -876,6 +876,14 @@ namespace ImageSharp.Tests
}
}
+ ///
+ /// Reference implementation to test .
+ /// Rounding is done used an integer-based algorithm defined in .
+ ///
+ /// The input block
+ /// The destination block of integers
+ /// The quantization table
+ /// Pointer to
public static unsafe void UnZigDivRoundRational(Block8x8F* src, int* dest, Block8x8F* qt, int* unzigPtr)
{
float* s = (float*)src;
@@ -891,6 +899,12 @@ namespace ImageSharp.Tests
}
}
+ ///
+ /// Rounds a rational number defined as dividend/divisor into an integer
+ ///
+ /// The dividend
+ /// The divisior
+ ///
[MethodImpl(MethodImplOptions.AggressiveInlining)]
private static int RationalRound(int dividend, int divisor)
{
diff --git a/tests/ImageSharp.Tests/Formats/Jpg/ReferenceImplementationsTests.cs b/tests/ImageSharp.Tests/Formats/Jpg/ReferenceImplementationsTests.cs
index 63878ea34a..5dd6b87aa5 100644
--- a/tests/ImageSharp.Tests/Formats/Jpg/ReferenceImplementationsTests.cs
+++ b/tests/ImageSharp.Tests/Formats/Jpg/ReferenceImplementationsTests.cs
@@ -97,13 +97,7 @@ namespace ImageSharp.Tests.Formats.Jpg
Assert.Equal(expected, actual, new ApproximateFloatComparer(2f));
}
}
-
- [Fact]
- public void HowMuchIsTheFish()
- {
- Output.WriteLine(Vector.Count.ToString());
- }
-
+
[Theory]
[InlineData(42)]
[InlineData(1)]