Browse Source

type names instead of var with primitive types, removed ImageSharp.Formats.Jpg subnamespaces, Block8x8F cleanup

pull/58/head
Anton Firszov 9 years ago
parent
commit
55c6452be7
  1. 11
      src/ImageSharp/Formats/Jpg/Components/Block8x8F.Generated.cs
  2. 11
      src/ImageSharp/Formats/Jpg/Components/Block8x8F.Generated.tt
  3. 179
      src/ImageSharp/Formats/Jpg/Components/Block8x8F.cs
  4. 2
      src/ImageSharp/Formats/Jpg/Components/DCT.cs
  5. 2
      src/ImageSharp/Formats/Jpg/Components/Decoder/Bits.cs
  6. 2
      src/ImageSharp/Formats/Jpg/Components/Decoder/Bytes.cs
  7. 2
      src/ImageSharp/Formats/Jpg/Components/Decoder/Component.cs
  8. 2
      src/ImageSharp/Formats/Jpg/Components/Decoder/GrayImage.cs
  9. 2
      src/ImageSharp/Formats/Jpg/Components/Decoder/HuffmanTree.cs
  10. 2
      src/ImageSharp/Formats/Jpg/Components/Decoder/YCbCrImage.cs
  11. 2
      src/ImageSharp/Formats/Jpg/Components/Encoder/HuffIndex.cs
  12. 2
      src/ImageSharp/Formats/Jpg/Components/Encoder/HuffmanLut.cs
  13. 2
      src/ImageSharp/Formats/Jpg/Components/Encoder/HuffmanSpec.cs
  14. 2
      src/ImageSharp/Formats/Jpg/Components/Encoder/QuantIndex.cs
  15. 23
      src/ImageSharp/Formats/Jpg/JpegDecoderCore.cs
  16. 3
      src/ImageSharp/Formats/Jpg/JpegEncoderCore.cs
  17. 4
      src/ImageSharp/Formats/Jpg/Utils/JpegUtils.cs
  18. 2
      src/ImageSharp/Formats/Jpg/Utils/MutableSpan.cs
  19. 2
      src/ImageSharp/Formats/Jpg/Utils/MutableSpanExtensions.cs
  20. 2
      src/ImageSharp/Image/PixelArea{TColor}.cs
  21. 3
      src/ImageSharp/ImageSharp.xproj
  22. 2
      src/ImageSharp/Numerics/RectangleF.cs
  23. 2
      tests/ImageSharp.Tests/Formats/Jpg/Block8x8FTests.cs
  24. 2
      tests/ImageSharp.Tests/Formats/Jpg/JpegTests.cs
  25. 2
      tests/ImageSharp.Tests/Formats/Jpg/ReferenceImplementations.cs
  26. 2
      tests/ImageSharp.Tests/Formats/Jpg/ReferenceImplementationsTests.cs
  27. 2
      tests/ImageSharp.Tests/Formats/Jpg/UtilityTestClassBase.cs

11
src/ImageSharp/Formats/Jpg/Components/Block8x8F.Generated.cs

@ -1,11 +1,16 @@
// <auto-generated />
// <copyright file="Block8x8F.cs" company="James Jackson-South">
// Copyright (c) James Jackson-South and contributors.
// Licensed under the Apache License, Version 2.0.
// </copyright>
// ReSharper disable InconsistentNaming
// <auto-generated />
#pragma warning disable
using System;
using System.Numerics;
using System.Runtime.CompilerServices;
namespace ImageSharp.Formats
namespace ImageSharp.Formats.Jpg
{
internal partial struct Block8x8F
{

11
src/ImageSharp/Formats/Jpg/Components/Block8x8F.Generated.tt

@ -1,11 +1,16 @@
<#@ template debug="false" hostspecific="false" language="C#" #>
// <copyright file="Block8x8F.cs" company="James Jackson-South">
// Copyright (c) James Jackson-South and contributors.
// Licensed under the Apache License, Version 2.0.
// </copyright>
// ReSharper disable InconsistentNaming
<#@ template debug="false" hostspecific="false" language="C#" #>
<#@ assembly name="System.Core" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Text" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ output extension=".cs" #>
// <auto-generated />
#pragma warning disable
using System;
using System.Numerics;
using System.Runtime.CompilerServices;
@ -14,7 +19,7 @@ using System.Runtime.CompilerServices;
char[] coordz = {'X', 'Y', 'Z', 'W'};
#>
namespace ImageSharp.Formats
namespace ImageSharp.Formats.Jpg
{
internal partial struct Block8x8F
{

179
src/ImageSharp/Formats/Jpg/Components/Block8x8F.cs

@ -3,21 +3,22 @@
// Licensed under the Apache License, Version 2.0.
// </copyright>
// ReSharper disable InconsistentNaming
namespace ImageSharp.Formats
namespace ImageSharp.Formats.Jpg
{
using System;
using System.Numerics;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using ImageSharp.Formats.Jpg.Utils;
/// <summary>
/// DCT code Ported from https://github.com/norishigefukushima/dct_simd
/// </summary>
internal partial struct Block8x8F
{
#pragma warning disable SA1204 // Static members must appear before non-static members
// Most of the static methods of this struct are instance methods by actual semantics: they use Block8x8F* as their first parameter.
// Example: GetScalarAt() and SetScalarAt() are really just other (optimized) versions of the indexer.
// It's much cleaner, easier and safer to work with the code, if the methods with same semantics are next to each other.
#pragma warning disable SA1204 // StaticElementsMustAppearBeforeInstanceElements
/// <summary>
/// Vector count
@ -56,7 +57,7 @@ namespace ImageSharp.Formats
#pragma warning restore SA1600 // ElementsMustBeDocumented
/// <summary>
/// Index into the block
/// Get/Set scalar elements at a given index
/// </summary>
/// <param name="idx">The index</param>
/// <returns>The float value at the specified index</returns>
@ -83,6 +84,55 @@ namespace ImageSharp.Formats
}
}
/// <summary>
/// Pointer-based "Indexer" (getter part)
/// </summary>
/// <param name="blockPtr">Block pointer</param>
/// <param name="idx">Index</param>
/// <returns>The scaleVec value at the specified index</returns>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static unsafe float GetScalarAt(Block8x8F* blockPtr, int idx)
{
float* fp = (float*)blockPtr;
return fp[idx];
}
/// <summary>
/// Pointer-based "Indexer" (setter part)
/// </summary>
/// <param name="blockPtr">Block pointer</param>
/// <param name="idx">Index</param>
/// <param name="value">Value</param>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static unsafe void SetScalarAt(Block8x8F* blockPtr, int idx, float value)
{
float* fp = (float*)blockPtr;
fp[idx] = value;
}
/// <summary>
/// Fill the block with defaults (zeroes)
/// </summary>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public void Clear()
{
// The cheapest way to do this in C#:
this = default(Block8x8F);
}
/// <summary>
/// Load raw 32bit floating point data from source
/// </summary>
/// <param name="source">Source</param>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public unsafe void LoadFrom(MutableSpan<float> source)
{
fixed (void* ptr = &this.V0L)
{
Marshal.Copy(source.Data, source.Offset, (IntPtr)ptr, ScalarCount);
}
}
/// <summary>
/// Load raw 32bit floating point data from source
/// </summary>
@ -94,15 +144,33 @@ namespace ImageSharp.Formats
Marshal.Copy(source.Data, source.Offset, (IntPtr)blockPtr, ScalarCount);
}
/// <summary>
/// Load raw 32bit floating point data from source
/// </summary>
/// <param name="source">Source</param>
public unsafe void LoadFrom(MutableSpan<int> source)
{
fixed (Vector4* ptr = &this.V0L)
{
float* fp = (float*)ptr;
for (int i = 0; i < ScalarCount; i++)
{
fp[i] = source[i];
}
}
}
/// <summary>
/// Copy raw 32bit floating point data to dest
/// </summary>
/// <param name="blockPtr">Block pointer</param>
/// <param name="dest">Destination</param>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static unsafe void CopyTo(Block8x8F* blockPtr, MutableSpan<float> dest)
public unsafe void CopyTo(MutableSpan<float> dest)
{
Marshal.Copy((IntPtr)blockPtr, dest.Data, dest.Offset, ScalarCount);
fixed (void* ptr = &this.V0L)
{
Marshal.Copy((IntPtr)ptr, dest.Data, dest.Offset, ScalarCount);
}
}
/// <summary>
@ -122,16 +190,14 @@ namespace ImageSharp.Formats
}
/// <summary>
/// Load raw 32bit floating point data from source
/// Copy raw 32bit floating point data to dest
/// </summary>
/// <param name="source">Source</param>
/// <param name="blockPtr">Block pointer</param>
/// <param name="dest">Destination</param>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public unsafe void LoadFrom(MutableSpan<float> source)
public static unsafe void CopyTo(Block8x8F* blockPtr, MutableSpan<float> dest)
{
fixed (void* ptr = &this.V0L)
{
Marshal.Copy(source.Data, source.Offset, (IntPtr)ptr, ScalarCount);
}
Marshal.Copy((IntPtr)blockPtr, dest.Data, dest.Offset, ScalarCount);
}
/// <summary>
@ -139,11 +205,11 @@ namespace ImageSharp.Formats
/// </summary>
/// <param name="dest">Destination</param>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public unsafe void CopyTo(MutableSpan<float> dest)
public unsafe void CopyTo(float[] dest)
{
fixed (void* ptr = &this.V0L)
{
Marshal.Copy((IntPtr)ptr, dest.Data, dest.Offset, ScalarCount);
Marshal.Copy((IntPtr)ptr, dest, 0, ScalarCount);
}
}
@ -151,12 +217,15 @@ namespace ImageSharp.Formats
/// Copy raw 32bit floating point data to dest
/// </summary>
/// <param name="dest">Destination</param>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public unsafe void CopyTo(float[] dest)
public unsafe void CopyTo(MutableSpan<int> dest)
{
fixed (void* ptr = &this.V0L)
fixed (Vector4* ptr = &this.V0L)
{
Marshal.Copy((IntPtr)ptr, dest, 0, ScalarCount);
float* fp = (float*)ptr;
for (int i = 0; i < ScalarCount; i++)
{
dest[i] = (int)fp[i];
}
}
}
@ -210,32 +279,6 @@ namespace ImageSharp.Formats
this.V7R += diff;
}
/// <summary>
/// Pointer-based "Indexer" (getter part)
/// </summary>
/// <param name="blockPtr">Block pointer</param>
/// <param name="idx">Index</param>
/// <returns>The scaleVec value at the specified index</returns>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static unsafe float GetScalarAt(Block8x8F* blockPtr, int idx)
{
float* fp = (float*)blockPtr;
return fp[idx];
}
/// <summary>
/// Pointer-based "Indexer" (setter part)
/// </summary>
/// <param name="blockPtr">Block pointer</param>
/// <param name="idx">Index</param>
/// <param name="value">Value</param>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static unsafe void SetScalarAt(Block8x8F* blockPtr, int idx, float value)
{
float* fp = (float*)blockPtr;
fp[idx] = value;
}
/// <summary>
/// Un-zig
/// </summary>
@ -256,48 +299,6 @@ namespace ImageSharp.Formats
}
}
/// <summary>
/// Copy raw 32bit floating point data to dest
/// </summary>
/// <param name="dest">Destination</param>
public unsafe void CopyTo(MutableSpan<int> dest)
{
fixed (Vector4* ptr = &this.V0L)
{
float* fp = (float*)ptr;
for (int i = 0; i < ScalarCount; i++)
{
dest[i] = (int)fp[i];
}
}
}
/// <summary>
/// Load raw 32bit floating point data from source
/// </summary>
/// <param name="source">Source</param>
public unsafe void LoadFrom(MutableSpan<int> source)
{
fixed (Vector4* ptr = &this.V0L)
{
float* fp = (float*)ptr;
for (int i = 0; i < ScalarCount; i++)
{
fp[i] = source[i];
}
}
}
/// <summary>
/// Fill the block with defaults (zeroes)
/// </summary>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public void Clear()
{
// The cheapest way to do this in C#:
this = default(Block8x8F);
}
/// <summary>
/// Level shift by +128, clip to [0, 255], and write to buffer.
/// </summary>

2
src/ImageSharp/Formats/Jpg/Components/DCT.cs

@ -4,7 +4,7 @@
// </copyright>
// ReSharper disable InconsistentNaming
namespace ImageSharp.Formats
namespace ImageSharp.Formats.Jpg
{
using System.Numerics;
using System.Runtime.CompilerServices;

2
src/ImageSharp/Formats/Jpg/Components/Decoder/Bits.cs

@ -3,7 +3,7 @@
// Licensed under the Apache License, Version 2.0.
// </copyright>
namespace ImageSharp.Formats.Jpg.Components.Decoder
namespace ImageSharp.Formats.Jpg
{
using System.Runtime.CompilerServices;

2
src/ImageSharp/Formats/Jpg/Components/Decoder/Bytes.cs

@ -2,7 +2,7 @@
// Copyright (c) James Jackson-South and contributors.
// Licensed under the Apache License, Version 2.0.
// </copyright>
namespace ImageSharp.Formats.Jpg.Components.Decoder
namespace ImageSharp.Formats.Jpg
{
using System;
using System.Buffers;

2
src/ImageSharp/Formats/Jpg/Components/Decoder/Component.cs

@ -3,7 +3,7 @@
// Licensed under the Apache License, Version 2.0.
// </copyright>
namespace ImageSharp.Formats.Jpg.Components.Decoder
namespace ImageSharp.Formats.Jpg
{
/// <summary>
/// Represents a single color component

2
src/ImageSharp/Formats/Jpg/Components/Decoder/GrayImage.cs

@ -3,7 +3,7 @@
// Licensed under the Apache License, Version 2.0.
// </copyright>
namespace ImageSharp.Formats.Jpg.Components.Decoder
namespace ImageSharp.Formats.Jpg
{
/// <summary>
/// Represents a grayscale image

2
src/ImageSharp/Formats/Jpg/Components/Decoder/HuffmanTree.cs

@ -2,7 +2,7 @@
// Copyright (c) James Jackson-South and contributors.
// Licensed under the Apache License, Version 2.0.
// </copyright>
namespace ImageSharp.Formats.Jpg.Components.Decoder
namespace ImageSharp.Formats.Jpg
{
using System;
using System.Buffers;

2
src/ImageSharp/Formats/Jpg/Components/Decoder/YCbCrImage.cs

@ -3,7 +3,7 @@
// Licensed under the Apache License, Version 2.0.
// </copyright>
namespace ImageSharp.Formats.Jpg.Components.Decoder
namespace ImageSharp.Formats.Jpg
{
/// <summary>
/// Represents an image made up of three color components (luminance, blue chroma, red chroma)

2
src/ImageSharp/Formats/Jpg/Components/Encoder/HuffIndex.cs

@ -2,7 +2,7 @@
// Copyright (c) James Jackson-South and contributors.
// Licensed under the Apache License, Version 2.0.
// </copyright>
namespace ImageSharp.Formats.Jpg.Components.Encoder
namespace ImageSharp.Formats.Jpg
{
/// <summary>
/// Enumerates the Huffman tables

2
src/ImageSharp/Formats/Jpg/Components/Encoder/HuffmanLut.cs

@ -3,7 +3,7 @@
// Licensed under the Apache License, Version 2.0.
// </copyright>
namespace ImageSharp.Formats.Jpg.Components.Encoder
namespace ImageSharp.Formats.Jpg
{
/// <summary>
/// A compiled look-up table representation of a huffmanSpec.

2
src/ImageSharp/Formats/Jpg/Components/Encoder/HuffmanSpec.cs

@ -2,7 +2,7 @@
// Copyright (c) James Jackson-South and contributors.
// Licensed under the Apache License, Version 2.0.
// </copyright>
namespace ImageSharp.Formats.Jpg.Components.Encoder
namespace ImageSharp.Formats.Jpg
{
/// <summary>
/// The Huffman encoding specifications.

2
src/ImageSharp/Formats/Jpg/Components/Encoder/QuantIndex.cs

@ -2,7 +2,7 @@
// Copyright (c) James Jackson-South and contributors.
// Licensed under the Apache License, Version 2.0.
// </copyright>
namespace ImageSharp.Formats.Jpg.Components.Encoder
namespace ImageSharp.Formats.Jpg
{
/// <summary>
/// Enumerates the quantization tables

23
src/ImageSharp/Formats/Jpg/JpegDecoderCore.cs

@ -10,9 +10,7 @@ namespace ImageSharp.Formats
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Threading.Tasks;
using ImageSharp.Formats.Jpg.Components.Decoder;
using ImageSharp.Formats.Jpg.Utils;
using ImageSharp.Formats.Jpg;
/// <summary>
/// Performs the jpeg decoding operation.
@ -652,7 +650,7 @@ namespace ImageSharp.Formats
if (this.bits.UnreadBits < 8)
{
var errorCode = this.bits.EnsureNBits(8, this);
ErrorCodes errorCode = this.bits.EnsureNBits(8, this);
if (errorCode == ErrorCodes.NoError)
{
@ -677,7 +675,7 @@ namespace ImageSharp.Formats
{
if (this.bits.UnreadBits == 0)
{
var errorCode = this.bits.EnsureNBits(1, this);
ErrorCodes errorCode = this.bits.EnsureNBits(1, this);
if (errorCode != ErrorCodes.NoError)
{
throw new MissingFF00Exception();
@ -711,7 +709,7 @@ namespace ImageSharp.Formats
{
if (this.bits.UnreadBits == 0)
{
var errorCode = this.bits.EnsureNBits(1, this);
ErrorCodes errorCode = this.bits.EnsureNBits(1, this);
if (errorCode != ErrorCodes.NoError)
{
throw new MissingFF00Exception();
@ -733,7 +731,7 @@ namespace ImageSharp.Formats
{
if (this.bits.UnreadBits < count)
{
var errorCode = this.bits.EnsureNBits(count, this);
ErrorCodes errorCode = this.bits.EnsureNBits(count, this);
if (errorCode != ErrorCodes.NoError)
{
throw new MissingFF00Exception();
@ -1521,7 +1519,7 @@ namespace ImageSharp.Formats
int compIndex = scan[i].Index;
if (this.progCoeffs[compIndex] == null)
{
var size = mxx * myy * this.componentArray[compIndex].HorizontalFactor
int size = mxx * myy * this.componentArray[compIndex].HorizontalFactor
* this.componentArray[compIndex].VerticalFactor;
this.progCoeffs[compIndex] = new Block8x8F[size];
@ -1601,7 +1599,7 @@ namespace ImageSharp.Formats
}
}
var qtIndex = this.componentArray[compIndex].Selector;
int qtIndex = this.componentArray[compIndex].Selector;
// TODO: Find a way to clean up this mess
fixed (Block8x8F* qtp = &this.quantizationTables[qtIndex])
@ -1716,7 +1714,7 @@ namespace ImageSharp.Formats
int bx,
Block8x8F* qt)
{
var huffmannIdx = (AcTable * ThRowSize) + scan[i].AcTableSelector;
int huffmannIdx = (AcTable * ThRowSize) + scan[i].AcTableSelector;
if (ah != 0)
{
this.Refine(b, ref this.huffmanTrees[huffmannIdx], unzigPtr, zigStart, zigEnd, 1 << al);
@ -2237,11 +2235,6 @@ namespace ImageSharp.Formats
public byte AcTableSelector { get; set; }
}
private struct StackallocUnzigData
{
internal fixed int Data[64];
}
/// <summary>
/// The missing ff00 exception.
/// </summary>

3
src/ImageSharp/Formats/Jpg/JpegEncoderCore.cs

@ -10,8 +10,7 @@ namespace ImageSharp.Formats
using System.Numerics;
using System.Runtime.CompilerServices;
using ImageSharp.Formats.Jpg.Components.Encoder;
using ImageSharp.Formats.Jpg.Utils;
using ImageSharp.Formats.Jpg;
/// <summary>
/// Image encoder for writing an image to a stream as a jpeg.

4
src/ImageSharp/Formats/Jpg/Utils/JpegUtils.cs

@ -2,13 +2,11 @@
// Copyright (c) James Jackson-South and contributors.
// Licensed under the Apache License, Version 2.0.
// </copyright>
namespace ImageSharp.Formats.Jpg.Utils
namespace ImageSharp.Formats.Jpg
{
using System;
using System.Runtime.CompilerServices;
using ImageSharp.Formats.Jpg.Components.Encoder;
/// <summary>
/// Jpeg specific utilities and extension methods
/// </summary>

2
src/ImageSharp/Formats/Jpg/Utils/MutableSpan.cs

@ -3,7 +3,7 @@
// Licensed under the Apache License, Version 2.0.
// </copyright>
namespace ImageSharp.Formats.Jpg.Utils
namespace ImageSharp.Formats.Jpg
{
using System.Runtime.CompilerServices;

2
src/ImageSharp/Formats/Jpg/Utils/MutableSpanExtensions.cs

@ -3,7 +3,7 @@
// Licensed under the Apache License, Version 2.0.
// </copyright>
namespace ImageSharp.Formats.Jpg.Utils
namespace ImageSharp.Formats.Jpg
{
using System.Numerics;
using System.Runtime.CompilerServices;

2
src/ImageSharp/Image/PixelArea{TColor}.cs

@ -134,7 +134,7 @@ namespace ImageSharp
this.ComponentOrder = componentOrder;
this.RowByteCount = (width * GetComponentCount(componentOrder)) + padding;
var bufferSize = this.RowByteCount * height;
int bufferSize = this.RowByteCount * height;
if (usePool)
{

3
src/ImageSharp/ImageSharp.xproj

@ -18,5 +18,8 @@
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
<ProduceOutputsOnBuild>True</ProduceOutputsOnBuild>
</PropertyGroup>
<ItemGroup>
<Service Include="{508349b6-6b84-4df5-91f0-309beebad82d}" />
</ItemGroup>
<Import Project="$(VSToolsPath)\DotNet\Microsoft.DotNet.targets" Condition="'$(VSToolsPath)' != ''" />
</Project>

2
src/ImageSharp/Numerics/RectangleF.cs

@ -249,7 +249,7 @@ namespace ImageSharp
/// </returns>
public static RectangleF Outset(RectangleF region, float width)
{
var dblWidth = width * 2;
float dblWidth = width * 2;
return new RectangleF(region.X - width, region.Y - width, region.Width + dblWidth, region.Height + dblWidth);
}

2
tests/ImageSharp.Tests/Formats/Jpg/Block8x8FTests.cs

@ -9,7 +9,7 @@ namespace ImageSharp.Tests
using System.Numerics;
using ImageSharp.Formats;
using ImageSharp.Formats.Jpg.Utils;
using ImageSharp.Formats.Jpg;
using Xunit;
using Xunit.Abstractions;

2
tests/ImageSharp.Tests/Formats/Jpg/JpegTests.cs

@ -11,7 +11,7 @@ namespace ImageSharp.Tests
{
using System.Numerics;
using ImageSharp.Formats.Jpg.Utils;
using ImageSharp.Formats.Jpg;
public class JpegTests
{

2
tests/ImageSharp.Tests/Formats/Jpg/ReferenceImplementations.cs

@ -7,7 +7,7 @@ namespace ImageSharp.Tests
using System.Runtime.CompilerServices;
using ImageSharp.Formats;
using ImageSharp.Formats.Jpg.Utils;
using ImageSharp.Formats.Jpg;
/// <summary>
/// This class contains simplified (unefficient) reference implementations to produce verification data for unit tests

2
tests/ImageSharp.Tests/Formats/Jpg/ReferenceImplementationsTests.cs

@ -3,7 +3,7 @@ namespace ImageSharp.Tests.Formats.Jpg
{
using System.Numerics;
using ImageSharp.Formats;
using ImageSharp.Formats.Jpg.Utils;
using ImageSharp.Formats.Jpg;
using Xunit;
using Xunit.Abstractions;

2
tests/ImageSharp.Tests/Formats/Jpg/UtilityTestClassBase.cs

@ -10,7 +10,7 @@ namespace ImageSharp.Tests
using System.Diagnostics;
using System.Runtime.CompilerServices;
using ImageSharp.Formats.Jpg.Utils;
using ImageSharp.Formats.Jpg;
/// <summary>
/// Utility class to measure the execution of an operation.

Loading…
Cancel
Save