|
|
|
@ -3,6 +3,7 @@ |
|
|
|
|
|
|
|
using System; |
|
|
|
using System.Numerics; |
|
|
|
using System.Runtime.CompilerServices; |
|
|
|
using System.Runtime.InteropServices; |
|
|
|
using SixLabors.ImageSharp.Memory; |
|
|
|
using SixLabors.ImageSharp.PixelFormats; |
|
|
|
@ -203,7 +204,7 @@ namespace SixLabors.ImageSharp.Tests.PixelFormats |
|
|
|
|
|
|
|
[Theory] |
|
|
|
[MemberData(nameof(ArraySizesData))] |
|
|
|
public void PackFromXyzBytes(int count) |
|
|
|
public void PackFromRgb24Bytes(int count) |
|
|
|
{ |
|
|
|
byte[] source = CreateByteTestData(count * 3); |
|
|
|
var expected = new TPixel[count]; |
|
|
|
@ -224,7 +225,7 @@ namespace SixLabors.ImageSharp.Tests.PixelFormats |
|
|
|
|
|
|
|
[Theory] |
|
|
|
[MemberData(nameof(ArraySizesData))] |
|
|
|
public void ToXyzBytes(int count) |
|
|
|
public void ToRgb24Bytes(int count) |
|
|
|
{ |
|
|
|
TPixel[] source = CreatePixelTestData(count); |
|
|
|
byte[] expected = new byte[count * 3]; |
|
|
|
@ -248,7 +249,7 @@ namespace SixLabors.ImageSharp.Tests.PixelFormats |
|
|
|
|
|
|
|
[Theory] |
|
|
|
[MemberData(nameof(ArraySizesData))] |
|
|
|
public void PackFromXyzwBytes(int count) |
|
|
|
public void PackFromRgba32Bytes(int count) |
|
|
|
{ |
|
|
|
byte[] source = CreateByteTestData(count * 4); |
|
|
|
var expected = new TPixel[count]; |
|
|
|
@ -269,7 +270,7 @@ namespace SixLabors.ImageSharp.Tests.PixelFormats |
|
|
|
|
|
|
|
[Theory] |
|
|
|
[MemberData(nameof(ArraySizesData))] |
|
|
|
public void ToXyzwBytes(int count) |
|
|
|
public void ToRgba32Bytes(int count) |
|
|
|
{ |
|
|
|
TPixel[] source = CreatePixelTestData(count); |
|
|
|
byte[] expected = new byte[count * 4]; |
|
|
|
@ -294,7 +295,109 @@ namespace SixLabors.ImageSharp.Tests.PixelFormats |
|
|
|
|
|
|
|
[Theory] |
|
|
|
[MemberData(nameof(ArraySizesData))] |
|
|
|
public void PackFromZyxBytes(int count) |
|
|
|
public void PackFromRgb48Bytes(int count) |
|
|
|
{ |
|
|
|
byte[] source = CreateByteTestData(count * 6); |
|
|
|
Span<byte> sourceSpan = source.AsSpan(); |
|
|
|
var expected = new TPixel[count]; |
|
|
|
|
|
|
|
var rgba64 = new Rgba64(0, 0, 0, 65535); |
|
|
|
for (int i = 0; i < count; i++) |
|
|
|
{ |
|
|
|
int i6 = i * 6; |
|
|
|
rgba64.Rgb = MemoryMarshal.Cast<byte, Rgb48>(sourceSpan.Slice(i6, 6))[0]; |
|
|
|
expected[i].PackFromRgba64(rgba64); |
|
|
|
} |
|
|
|
|
|
|
|
TestOperation( |
|
|
|
source, |
|
|
|
expected, |
|
|
|
(s, d) => Operations.PackFromRgb48Bytes(s, d.Span, count) |
|
|
|
); |
|
|
|
} |
|
|
|
|
|
|
|
[Theory] |
|
|
|
[MemberData(nameof(ArraySizesData))] |
|
|
|
public void ToRgb48Bytes(int count) |
|
|
|
{ |
|
|
|
TPixel[] source = CreatePixelTestData(count); |
|
|
|
byte[] expected = new byte[count * 6]; |
|
|
|
Rgb48 rgb = default; |
|
|
|
|
|
|
|
for (int i = 0; i < count; i++) |
|
|
|
{ |
|
|
|
int i6 = i * 6; |
|
|
|
source[i].ToRgb48(ref rgb); |
|
|
|
Rgba64Bytes rgb48Bytes = Unsafe.As<Rgb48, Rgba64Bytes>(ref rgb); |
|
|
|
expected[i6] = rgb48Bytes[0]; |
|
|
|
expected[i6 + 1] = rgb48Bytes[1]; |
|
|
|
expected[i6 + 2] = rgb48Bytes[2]; |
|
|
|
expected[i6 + 3] = rgb48Bytes[3]; |
|
|
|
expected[i6 + 4] = rgb48Bytes[4]; |
|
|
|
expected[i6 + 5] = rgb48Bytes[5]; |
|
|
|
} |
|
|
|
|
|
|
|
TestOperation( |
|
|
|
source, |
|
|
|
expected, |
|
|
|
(s, d) => Operations.ToRgb48Bytes(s, d.Span, count) |
|
|
|
); |
|
|
|
} |
|
|
|
|
|
|
|
[Theory] |
|
|
|
[MemberData(nameof(ArraySizesData))] |
|
|
|
public void PackFromRgba64Bytes(int count) |
|
|
|
{ |
|
|
|
byte[] source = CreateByteTestData(count * 8); |
|
|
|
Span<byte> sourceSpan = source.AsSpan(); |
|
|
|
var expected = new TPixel[count]; |
|
|
|
|
|
|
|
for (int i = 0; i < count; i++) |
|
|
|
{ |
|
|
|
int i8 = i * 8; |
|
|
|
expected[i].PackFromRgba64(MemoryMarshal.Cast<byte, Rgba64>(sourceSpan.Slice(i8, 8))[0]); |
|
|
|
} |
|
|
|
|
|
|
|
TestOperation( |
|
|
|
source, |
|
|
|
expected, |
|
|
|
(s, d) => Operations.PackFromRgba64Bytes(s, d.Span, count) |
|
|
|
); |
|
|
|
} |
|
|
|
|
|
|
|
[Theory] |
|
|
|
[MemberData(nameof(ArraySizesData))] |
|
|
|
public void ToRgba64Bytes(int count) |
|
|
|
{ |
|
|
|
TPixel[] source = CreatePixelTestData(count); |
|
|
|
byte[] expected = new byte[count * 8]; |
|
|
|
Rgba64 rgba = default; |
|
|
|
|
|
|
|
for (int i = 0; i < count; i++) |
|
|
|
{ |
|
|
|
int i8 = i * 8; |
|
|
|
source[i].ToRgba64(ref rgba); |
|
|
|
Rgba64Bytes rgba64Bytes = Unsafe.As<Rgba64, Rgba64Bytes>(ref rgba); |
|
|
|
expected[i8] = rgba64Bytes[0]; |
|
|
|
expected[i8 + 1] = rgba64Bytes[1]; |
|
|
|
expected[i8 + 2] = rgba64Bytes[2]; |
|
|
|
expected[i8 + 3] = rgba64Bytes[3]; |
|
|
|
expected[i8 + 4] = rgba64Bytes[4]; |
|
|
|
expected[i8 + 5] = rgba64Bytes[5]; |
|
|
|
expected[i8 + 6] = rgba64Bytes[6]; |
|
|
|
expected[i8 + 7] = rgba64Bytes[7]; |
|
|
|
} |
|
|
|
|
|
|
|
TestOperation( |
|
|
|
source, |
|
|
|
expected, |
|
|
|
(s, d) => Operations.ToRgba64Bytes(s, d.Span, count) |
|
|
|
); |
|
|
|
} |
|
|
|
|
|
|
|
[Theory] |
|
|
|
[MemberData(nameof(ArraySizesData))] |
|
|
|
public void PackFromBgr24Bytes(int count) |
|
|
|
{ |
|
|
|
byte[] source = CreateByteTestData(count * 3); |
|
|
|
var expected = new TPixel[count]; |
|
|
|
@ -315,7 +418,7 @@ namespace SixLabors.ImageSharp.Tests.PixelFormats |
|
|
|
|
|
|
|
[Theory] |
|
|
|
[MemberData(nameof(ArraySizesData))] |
|
|
|
public void ToZyxBytes(int count) |
|
|
|
public void ToBgr24Bytes(int count) |
|
|
|
{ |
|
|
|
TPixel[] source = CreatePixelTestData(count); |
|
|
|
byte[] expected = new byte[count * 3]; |
|
|
|
@ -339,7 +442,7 @@ namespace SixLabors.ImageSharp.Tests.PixelFormats |
|
|
|
|
|
|
|
[Theory] |
|
|
|
[MemberData(nameof(ArraySizesData))] |
|
|
|
public void PackFromZyxwBytes(int count) |
|
|
|
public void PackFromBgra32Bytes(int count) |
|
|
|
{ |
|
|
|
byte[] source = CreateByteTestData(count * 4); |
|
|
|
var expected = new TPixel[count]; |
|
|
|
@ -385,7 +488,7 @@ namespace SixLabors.ImageSharp.Tests.PixelFormats |
|
|
|
|
|
|
|
[Theory] |
|
|
|
[MemberData(nameof(ArraySizesData))] |
|
|
|
public void PackFromWzyxBytes(int count) |
|
|
|
public void PackFromArgb32Bytes(int count) |
|
|
|
{ |
|
|
|
byte[] source = CreateByteTestData(count * 4); |
|
|
|
var expected = new TPixel[count]; |
|
|
|
@ -406,7 +509,7 @@ namespace SixLabors.ImageSharp.Tests.PixelFormats |
|
|
|
|
|
|
|
[Theory] |
|
|
|
[MemberData(nameof(ArraySizesData))] |
|
|
|
public void ToWzyxBytes(int count) |
|
|
|
public void ToArgb32Bytes(int count) |
|
|
|
{ |
|
|
|
TPixel[] source = CreatePixelTestData(count); |
|
|
|
byte[] expected = new byte[count * 4]; |
|
|
|
@ -557,5 +660,21 @@ namespace SixLabors.ImageSharp.Tests.PixelFormats |
|
|
|
(float)rnd.NextDouble() |
|
|
|
); |
|
|
|
} |
|
|
|
|
|
|
|
[StructLayout(LayoutKind.Sequential)] |
|
|
|
private unsafe struct Rgba64Bytes |
|
|
|
{ |
|
|
|
public fixed byte Data[8]; |
|
|
|
|
|
|
|
public byte this[int idx] |
|
|
|
{ |
|
|
|
[MethodImpl(MethodImplOptions.AggressiveInlining)] |
|
|
|
get |
|
|
|
{ |
|
|
|
ref byte self = ref Unsafe.As<Rgba64Bytes, byte>(ref this); |
|
|
|
return Unsafe.Add(ref self, idx); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |