Browse Source

CopyTo -> ScaledCopyTo

pull/1143/head
Anton Firszov 6 years ago
parent
commit
c61c3d71b6
  1. 6
      src/ImageSharp/Formats/Jpeg/Components/Block8x8F.ScaledCopyTo.cs
  2. 14
      src/ImageSharp/Formats/Jpeg/Components/Block8x8F.cs
  3. 2
      src/ImageSharp/Formats/Jpeg/Components/Decoder/JpegBlockPostProcessor.cs
  4. 2
      tests/ImageSharp.Tests/Formats/Jpg/Block8x8FTests.CopyToBufferArea.cs
  5. 10
      tests/ImageSharp.Tests/Formats/Jpg/Block8x8FTests.cs
  6. 10
      tests/ImageSharp.Tests/Formats/Jpg/DCTTests.cs
  7. 4
      tests/ImageSharp.Tests/Formats/Jpg/Utils/ReferenceImplementations.LLM_FloatingPoint_DCT.cs

6
src/ImageSharp/Formats/Jpeg/Components/Block8x8F.CopyTo.cs → src/ImageSharp/Formats/Jpeg/Components/Block8x8F.ScaledCopyTo.cs

@ -15,14 +15,14 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.Components
/// Copy block data into the destination color buffer pixel area with the provided horizontal and vertical scale factors. /// Copy block data into the destination color buffer pixel area with the provided horizontal and vertical scale factors.
/// </summary> /// </summary>
[MethodImpl(InliningOptions.ShortMethod)] [MethodImpl(InliningOptions.ShortMethod)]
public void CopyTo(in BufferArea<float> area, int horizontalScale, int verticalScale) public void ScaledCopyTo(in BufferArea<float> area, int horizontalScale, int verticalScale)
{ {
ref float areaOrigin = ref area.GetReferenceToOrigin(); ref float areaOrigin = ref area.GetReferenceToOrigin();
this.CopyTo(ref areaOrigin, area.Stride, horizontalScale, verticalScale); this.ScaledCopyTo(ref areaOrigin, area.Stride, horizontalScale, verticalScale);
} }
[MethodImpl(InliningOptions.ShortMethod)] [MethodImpl(InliningOptions.ShortMethod)]
public void CopyTo(ref float areaOrigin, int areaStride, int horizontalScale, int verticalScale) public void ScaledCopyTo(ref float areaOrigin, int areaStride, int horizontalScale, int verticalScale)
{ {
if (horizontalScale == 1 && verticalScale == 1) if (horizontalScale == 1 && verticalScale == 1)
{ {

14
src/ImageSharp/Formats/Jpeg/Components/Block8x8F.cs

@ -201,7 +201,7 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.Components
/// </summary> /// </summary>
/// <param name="dest">Destination</param> /// <param name="dest">Destination</param>
[MethodImpl(InliningOptions.ShortMethod)] [MethodImpl(InliningOptions.ShortMethod)]
public void CopyTo(Span<float> dest) public void ScaledCopyTo(Span<float> dest)
{ {
ref byte d = ref Unsafe.As<float, byte>(ref MemoryMarshal.GetReference(dest)); ref byte d = ref Unsafe.As<float, byte>(ref MemoryMarshal.GetReference(dest));
ref byte s = ref Unsafe.As<Block8x8F, byte>(ref this); ref byte s = ref Unsafe.As<Block8x8F, byte>(ref this);
@ -215,7 +215,7 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.Components
/// <param name="blockPtr">Pointer to block</param> /// <param name="blockPtr">Pointer to block</param>
/// <param name="dest">Destination</param> /// <param name="dest">Destination</param>
[MethodImpl(InliningOptions.ShortMethod)] [MethodImpl(InliningOptions.ShortMethod)]
public static unsafe void CopyTo(Block8x8F* blockPtr, Span<byte> dest) public static unsafe void ScaledCopyTo(Block8x8F* blockPtr, Span<byte> dest)
{ {
float* fPtr = (float*)blockPtr; float* fPtr = (float*)blockPtr;
for (int i = 0; i < Size; i++) for (int i = 0; i < Size; i++)
@ -231,9 +231,9 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.Components
/// <param name="blockPtr">The block pointer.</param> /// <param name="blockPtr">The block pointer.</param>
/// <param name="dest">The destination.</param> /// <param name="dest">The destination.</param>
[MethodImpl(InliningOptions.ShortMethod)] [MethodImpl(InliningOptions.ShortMethod)]
public static unsafe void CopyTo(Block8x8F* blockPtr, Span<float> dest) public static unsafe void ScaledCopyTo(Block8x8F* blockPtr, Span<float> dest)
{ {
blockPtr->CopyTo(dest); blockPtr->ScaledCopyTo(dest);
} }
/// <summary> /// <summary>
@ -241,7 +241,7 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.Components
/// </summary> /// </summary>
/// <param name="dest">Destination</param> /// <param name="dest">Destination</param>
[MethodImpl(InliningOptions.ShortMethod)] [MethodImpl(InliningOptions.ShortMethod)]
public unsafe void CopyTo(float[] dest) public unsafe void ScaledCopyTo(float[] dest)
{ {
fixed (void* ptr = &this.V0L) fixed (void* ptr = &this.V0L)
{ {
@ -253,7 +253,7 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.Components
/// Copy raw 32bit floating point data to dest /// Copy raw 32bit floating point data to dest
/// </summary> /// </summary>
/// <param name="dest">Destination</param> /// <param name="dest">Destination</param>
public unsafe void CopyTo(Span<int> dest) public unsafe void ScaledCopyTo(Span<int> dest)
{ {
fixed (Vector4* ptr = &this.V0L) fixed (Vector4* ptr = &this.V0L)
{ {
@ -268,7 +268,7 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.Components
public float[] ToArray() public float[] ToArray()
{ {
var result = new float[Size]; var result = new float[Size];
this.CopyTo(result); this.ScaledCopyTo(result);
return result; return result;
} }

2
src/ImageSharp/Formats/Jpeg/Components/Decoder/JpegBlockPostProcessor.cs

@ -90,7 +90,7 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.Components.Decoder
// To be "more accurate", we need to emulate this by rounding! // To be "more accurate", we need to emulate this by rounding!
this.WorkspaceBlock1.NormalizeColorsAndRoundInplace(maximumValue); this.WorkspaceBlock1.NormalizeColorsAndRoundInplace(maximumValue);
this.WorkspaceBlock1.CopyTo( this.WorkspaceBlock1.ScaledCopyTo(
ref destAreaOrigin, ref destAreaOrigin,
destAreaStride, destAreaStride,
this.subSamplingDivisors.Width, this.subSamplingDivisors.Width,

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

@ -72,7 +72,7 @@ namespace SixLabors.ImageSharp.Tests.Formats.Jpg
using (Buffer2D<float> buffer = Configuration.Default.MemoryAllocator.Allocate2D<float>(100, 100, AllocationOptions.Clean)) using (Buffer2D<float> buffer = Configuration.Default.MemoryAllocator.Allocate2D<float>(100, 100, AllocationOptions.Clean))
{ {
BufferArea<float> area = buffer.GetArea(start.X, start.Y, 8 * horizontalFactor, 8 * verticalFactor); BufferArea<float> area = buffer.GetArea(start.X, start.Y, 8 * horizontalFactor, 8 * verticalFactor);
block.CopyTo(area, horizontalFactor, verticalFactor); block.ScaledCopyTo(area, horizontalFactor, verticalFactor);
for (int y = 0; y < 8 * verticalFactor; y++) for (int y = 0; y < 8 * verticalFactor; y++)
{ {

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

@ -104,7 +104,7 @@ namespace SixLabors.ImageSharp.Tests.Formats.Jpg
{ {
var b = default(Block8x8F); var b = default(Block8x8F);
b.LoadFrom(data); b.LoadFrom(data);
b.CopyTo(mirror); b.ScaledCopyTo(mirror);
}); });
Assert.Equal(data, mirror); Assert.Equal(data, mirror);
@ -129,7 +129,7 @@ namespace SixLabors.ImageSharp.Tests.Formats.Jpg
{ {
var b = default(Block8x8F); var b = default(Block8x8F);
Block8x8F.LoadFrom(&b, data); Block8x8F.LoadFrom(&b, data);
Block8x8F.CopyTo(&b, mirror); Block8x8F.ScaledCopyTo(&b, mirror);
}); });
Assert.Equal(data, mirror); Assert.Equal(data, mirror);
@ -154,7 +154,7 @@ namespace SixLabors.ImageSharp.Tests.Formats.Jpg
{ {
var v = default(Block8x8F); var v = default(Block8x8F);
v.LoadFrom(data); v.LoadFrom(data);
v.CopyTo(mirror); v.ScaledCopyTo(mirror);
}); });
Assert.Equal(data, mirror); Assert.Equal(data, mirror);
@ -175,7 +175,7 @@ namespace SixLabors.ImageSharp.Tests.Formats.Jpg
source.TransposeInto(ref dest); source.TransposeInto(ref dest);
float[] actual = new float[64]; float[] actual = new float[64];
dest.CopyTo(actual); dest.ScaledCopyTo(actual);
Assert.Equal(expected, actual); Assert.Equal(expected, actual);
} }
@ -231,7 +231,7 @@ namespace SixLabors.ImageSharp.Tests.Formats.Jpg
dest.NormalizeColorsInplace(255); dest.NormalizeColorsInplace(255);
float[] array = new float[64]; float[] array = new float[64];
dest.CopyTo(array); dest.ScaledCopyTo(array);
this.Output.WriteLine("Result:"); this.Output.WriteLine("Result:");
this.PrintLinearData(array); this.PrintLinearData(array);
foreach (float val in array) foreach (float val in array)

10
tests/ImageSharp.Tests/Formats/Jpg/DCTTests.cs

@ -37,7 +37,7 @@ namespace SixLabors.ImageSharp.Tests.Formats.Jpg
FastFloatingPointDCT.IDCT8x4_LeftPart(ref source, ref dest); FastFloatingPointDCT.IDCT8x4_LeftPart(ref source, ref dest);
var actualDestArray = new float[64]; var actualDestArray = new float[64];
dest.CopyTo(actualDestArray); dest.ScaledCopyTo(actualDestArray);
this.Print8x8Data(expectedDestArray); this.Print8x8Data(expectedDestArray);
this.Output.WriteLine("**************"); this.Output.WriteLine("**************");
@ -62,7 +62,7 @@ namespace SixLabors.ImageSharp.Tests.Formats.Jpg
FastFloatingPointDCT.IDCT8x4_RightPart(ref source, ref dest); FastFloatingPointDCT.IDCT8x4_RightPart(ref source, ref dest);
var actualDestArray = new float[64]; var actualDestArray = new float[64];
dest.CopyTo(actualDestArray); dest.ScaledCopyTo(actualDestArray);
this.Print8x8Data(expectedDestArray); this.Print8x8Data(expectedDestArray);
this.Output.WriteLine("**************"); this.Output.WriteLine("**************");
@ -126,7 +126,7 @@ namespace SixLabors.ImageSharp.Tests.Formats.Jpg
FastFloatingPointDCT.FDCT8x4_LeftPart(ref srcBlock, ref destBlock); FastFloatingPointDCT.FDCT8x4_LeftPart(ref srcBlock, ref destBlock);
var actualDest = new float[64]; var actualDest = new float[64];
destBlock.CopyTo(actualDest); destBlock.ScaledCopyTo(actualDest);
Assert.Equal(actualDest, expectedDest, new ApproximateFloatComparer(1f)); Assert.Equal(actualDest, expectedDest, new ApproximateFloatComparer(1f));
} }
@ -148,7 +148,7 @@ namespace SixLabors.ImageSharp.Tests.Formats.Jpg
FastFloatingPointDCT.FDCT8x4_RightPart(ref srcBlock, ref destBlock); FastFloatingPointDCT.FDCT8x4_RightPart(ref srcBlock, ref destBlock);
var actualDest = new float[64]; var actualDest = new float[64];
destBlock.CopyTo(actualDest); destBlock.ScaledCopyTo(actualDest);
Assert.Equal(actualDest, expectedDest, new ApproximateFloatComparer(1f)); Assert.Equal(actualDest, expectedDest, new ApproximateFloatComparer(1f));
} }
@ -172,7 +172,7 @@ namespace SixLabors.ImageSharp.Tests.Formats.Jpg
FastFloatingPointDCT.TransformFDCT(ref srcBlock, ref destBlock, ref temp2, false); FastFloatingPointDCT.TransformFDCT(ref srcBlock, ref destBlock, ref temp2, false);
var actualDest = new float[64]; var actualDest = new float[64];
destBlock.CopyTo(actualDest); destBlock.ScaledCopyTo(actualDest);
Assert.Equal(actualDest, expectedDest, new ApproximateFloatComparer(1f)); Assert.Equal(actualDest, expectedDest, new ApproximateFloatComparer(1f));
} }

4
tests/ImageSharp.Tests/Formats/Jpg/Utils/ReferenceImplementations.LLM_FloatingPoint_DCT.cs

@ -33,7 +33,7 @@ namespace SixLabors.ImageSharp.Tests.Formats.Jpg.Utils
public static Block8x8F TransformIDCT(ref Block8x8F source) public static Block8x8F TransformIDCT(ref Block8x8F source)
{ {
float[] s = new float[64]; float[] s = new float[64];
source.CopyTo(s); source.ScaledCopyTo(s);
float[] d = new float[64]; float[] d = new float[64];
float[] temp = new float[64]; float[] temp = new float[64];
@ -46,7 +46,7 @@ namespace SixLabors.ImageSharp.Tests.Formats.Jpg.Utils
public static Block8x8F TransformFDCT_UpscaleBy8(ref Block8x8F source) public static Block8x8F TransformFDCT_UpscaleBy8(ref Block8x8F source)
{ {
float[] s = new float[64]; float[] s = new float[64];
source.CopyTo(s); source.ScaledCopyTo(s);
float[] d = new float[64]; float[] d = new float[64];
float[] temp = new float[64]; float[] temp = new float[64];

Loading…
Cancel
Save