diff --git a/src/ImageSharp/PixelFormats/Bgr24.cs b/src/ImageSharp/PixelFormats/Bgr24.cs
index a3b3a907da..cc77200441 100644
--- a/src/ImageSharp/PixelFormats/Bgr24.cs
+++ b/src/ImageSharp/PixelFormats/Bgr24.cs
@@ -71,27 +71,35 @@
}
///
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
public void PackFromRgba32(Rgba32 source)
{
- throw new NotImplementedException();
+ this = source.Bgr;
}
///
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
public void PackFromVector4(Vector4 vector)
{
- throw new NotImplementedException();
+ var rgba = default(Rgba32);
+ rgba.PackFromVector4(vector);
+ this.PackFromRgba32(rgba);
}
///
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
public Vector4 ToVector4()
{
- throw new NotImplementedException();
+ return new Rgba32(this.R, this.G, this.B, 255).ToVector4();
}
///
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
public void ToRgb24(ref Rgb24 dest)
{
- throw new NotImplementedException();
+ dest.R = this.R;
+ dest.G = this.G;
+ dest.B = this.B;
}
///
@@ -107,13 +115,16 @@
///
public void ToBgr24(ref Bgr24 dest)
{
- throw new NotImplementedException();
+ dest = this;
}
///
public void ToBgra32(ref Bgra32 dest)
{
- throw new NotImplementedException();
+ dest.R = this.R;
+ dest.G = this.G;
+ dest.B = this.B;
+ dest.A = 255;
}
}
}
\ No newline at end of file
diff --git a/src/ImageSharp/PixelFormats/Bgra32.cs b/src/ImageSharp/PixelFormats/Bgra32.cs
index e07e4c0e35..8146321b9b 100644
--- a/src/ImageSharp/PixelFormats/Bgra32.cs
+++ b/src/ImageSharp/PixelFormats/Bgra32.cs
@@ -1,12 +1,10 @@
-namespace ImageSharp
+namespace ImageSharp.PixelFormats
{
using System;
using System.Numerics;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
- using ImageSharp.PixelFormats;
-
///
/// Packed pixel type containing four 8-bit unsigned normalized values ranging from 0 to 255.
/// The color components are stored in blue, green, red, and alpha order.
@@ -116,45 +114,62 @@
}
///
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
public void PackFromVector4(Vector4 vector)
{
- throw new NotImplementedException();
+ var rgba = default(Rgba32);
+ rgba.PackFromVector4(vector);
+ this.PackFromRgba32(rgba);
}
///
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
public Vector4 ToVector4()
{
- throw new NotImplementedException();
+ return this.ToRgba32().ToVector4();
}
///
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
public void PackFromRgba32(Rgba32 source)
{
- throw new NotImplementedException();
+ this.R = source.R;
+ this.G = source.G;
+ this.B = source.B;
+ this.A = source.A;
}
///
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
public void ToRgb24(ref Rgb24 dest)
{
- throw new NotImplementedException();
+ dest.R = this.R;
+ dest.G = this.G;
+ dest.B = this.B;
}
///
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
public void ToRgba32(ref Rgba32 dest)
{
- throw new NotImplementedException();
+ dest.R = this.R;
+ dest.G = this.G;
+ dest.B = this.B;
+ dest.A = this.A;
}
///
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
public void ToBgr24(ref Bgr24 dest)
{
- throw new NotImplementedException();
+ dest = Unsafe.As(ref this);
}
///
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
public void ToBgra32(ref Bgra32 dest)
{
- throw new NotImplementedException();
+ dest = this;
}
///
diff --git a/src/ImageSharp/PixelFormats/Rgb24.cs b/src/ImageSharp/PixelFormats/Rgb24.cs
index 13dcaff95f..47dd960557 100644
--- a/src/ImageSharp/PixelFormats/Rgb24.cs
+++ b/src/ImageSharp/PixelFormats/Rgb24.cs
@@ -71,45 +71,57 @@ namespace ImageSharp.PixelFormats
}
///
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
public void PackFromRgba32(Rgba32 source)
{
- throw new NotImplementedException();
+ this = Unsafe.As(ref source);
}
///
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
public void PackFromVector4(Vector4 vector)
{
- throw new NotImplementedException();
+ var rgba = default(Rgba32);
+ rgba.PackFromVector4(vector);
+ this.PackFromRgba32(rgba);
}
///
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
public Vector4 ToVector4()
{
- throw new NotImplementedException();
+ return new Rgba32(this.R, this.G, this.B, 255).ToVector4();
}
///
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
public void ToRgb24(ref Rgb24 dest)
{
- throw new NotImplementedException();
+ dest = this;
}
///
public void ToRgba32(ref Rgba32 dest)
{
- throw new NotImplementedException();
+ dest.Rgb = this;
+ dest.A = 255;
}
///
public void ToBgr24(ref Bgr24 dest)
{
- throw new NotImplementedException();
+ dest.R = this.R;
+ dest.G = this.G;
+ dest.B = this.B;
}
///
public void ToBgra32(ref Bgra32 dest)
{
- throw new NotImplementedException();
+ dest.R = this.R;
+ dest.G = this.G;
+ dest.B = this.B;
+ dest.A = 255;
}
}
}
\ No newline at end of file
diff --git a/tests/ImageSharp.Tests/PixelFormats/Bgr24Tests.cs b/tests/ImageSharp.Tests/PixelFormats/Bgr24Tests.cs
index 13f67fc279..76001ed3a0 100644
--- a/tests/ImageSharp.Tests/PixelFormats/Bgr24Tests.cs
+++ b/tests/ImageSharp.Tests/PixelFormats/Bgr24Tests.cs
@@ -1,6 +1,8 @@
// ReSharper disable InconsistentNaming
namespace ImageSharp.Tests
{
+ using System.Numerics;
+
using ImageSharp.PixelFormats;
using Xunit;
@@ -36,8 +38,8 @@ namespace ImageSharp.Tests
[MemberData(nameof(ColorData))]
public void Equals_WhenTrue(byte r, byte g, byte b)
{
- var x = new Rgb24(r, g, b);
- var y = new Rgb24(r, g, b);
+ var x = new Bgr24(r, g, b);
+ var y = new Bgr24(r, g, b);
Assert.True(x.Equals(y));
Assert.True(x.Equals((object)y));
@@ -50,11 +52,92 @@ namespace ImageSharp.Tests
[InlineData(1, 255, 0, 0, 255, 0)]
public void Equals_WhenFalse(byte r1, byte g1, byte b1, byte r2, byte g2, byte b2)
{
- var a = new Rgb24(r1, g1, b1);
- var b = new Rgb24(r2, g2, b2);
+ var a = new Bgr24(r1, g1, b1);
+ var b = new Bgr24(r2, g2, b2);
Assert.False(a.Equals(b));
Assert.False(a.Equals((object)b));
}
+
+
+ [Fact]
+ public void PackFromRgba32()
+ {
+ var rgb = default(Bgr24);
+ rgb.PackFromRgba32(new Rgba32(1, 2, 3, 4));
+
+ Assert.Equal(1, rgb.R);
+ Assert.Equal(2, rgb.G);
+ Assert.Equal(3, rgb.B);
+ }
+
+ private static Vector4 Vec(byte r, byte g, byte b, byte a = 255) => new Vector4(
+ r / 255f,
+ g / 255f,
+ b / 255f,
+ a / 255f);
+
+ [Fact]
+ public void PackFromVector4()
+ {
+ var rgb = default(Bgr24);
+ rgb.PackFromVector4(Vec(1, 2, 3, 4));
+
+ Assert.Equal(1, rgb.R);
+ Assert.Equal(2, rgb.G);
+ Assert.Equal(3, rgb.B);
+ }
+
+ [Fact]
+ public void ToVector4()
+ {
+ var rgb = new Bgr24(1, 2, 3);
+
+ Assert.Equal(Vec(1, 2, 3), rgb.ToVector4());
+ }
+
+ [Fact]
+ public void ToRgb24()
+ {
+ var rgb = new Bgr24(1, 2, 3);
+ var dest = default(Rgb24);
+
+ rgb.ToRgb24(ref dest);
+
+ Assert.Equal(new Rgb24(1, 2, 3), dest);
+ }
+
+ [Fact]
+ public void ToRgba32()
+ {
+ var rgb = new Bgr24(1, 2, 3);
+ var rgba = default(Rgba32);
+
+ rgb.ToRgba32(ref rgba);
+
+ Assert.Equal(new Rgba32(1, 2, 3, 255), rgba);
+ }
+
+ [Fact]
+ public void ToBgr24()
+ {
+ var rgb = new Bgr24(1, 2, 3);
+ var bgr = default(Bgr24);
+
+ rgb.ToBgr24(ref bgr);
+
+ Assert.Equal(new Bgr24(1, 2, 3), bgr);
+ }
+
+ [Fact]
+ public void ToBgra32()
+ {
+ var rgb = new Bgr24(1, 2, 3);
+ var bgra = default(Bgra32);
+
+ rgb.ToBgra32(ref bgra);
+
+ Assert.Equal(new Bgra32(1, 2, 3, 255), bgra);
+ }
}
}
\ No newline at end of file
diff --git a/tests/ImageSharp.Tests/PixelFormats/Bgra32Tests.cs b/tests/ImageSharp.Tests/PixelFormats/Bgra32Tests.cs
index 1ff91a2b13..1928d51f69 100644
--- a/tests/ImageSharp.Tests/PixelFormats/Bgra32Tests.cs
+++ b/tests/ImageSharp.Tests/PixelFormats/Bgra32Tests.cs
@@ -1,6 +1,8 @@
// ReSharper disable InconsistentNaming
namespace ImageSharp.Tests
{
+ using System.Numerics;
+
using ImageSharp.PixelFormats;
using Xunit;
@@ -62,5 +64,87 @@ namespace ImageSharp.Tests
Assert.False(x.Equals(y));
Assert.False(x.Equals((object)y));
}
+
+
+ [Fact]
+ public void PackFromRgba32()
+ {
+ var rgb = default(Rgb24);
+ rgb.PackFromRgba32(new Rgba32(1, 2, 3, 4));
+
+ Assert.Equal(1, rgb.R);
+ Assert.Equal(2, rgb.G);
+ Assert.Equal(3, rgb.B);
+ }
+
+ private static Vector4 Vec(byte r, byte g, byte b, byte a = 255) => new Vector4(
+ r / 255f,
+ g / 255f,
+ b / 255f,
+ a / 255f);
+
+ [Fact]
+ public void PackFromVector4()
+ {
+ var c = default(Bgra32);
+ c.PackFromVector4(Vec(1, 2, 3, 4));
+
+ Assert.Equal(1, c.R);
+ Assert.Equal(2, c.G);
+ Assert.Equal(3, c.B);
+ Assert.Equal(4, c.A);
+ }
+
+ [Fact]
+ public void ToVector4()
+ {
+ var rgb = new Bgra32(1, 2, 3, 4);
+
+ Assert.Equal(Vec(1, 2, 3, 4), rgb.ToVector4());
+ }
+
+ [Fact]
+ public void ToRgb24()
+ {
+ var c = new Bgra32(1, 2, 3, 4);
+ var dest = default(Rgb24);
+
+ c.ToRgb24(ref dest);
+
+ Assert.Equal(new Rgb24(1, 2, 3), dest);
+ }
+
+ [Fact]
+ public void ToRgba32()
+ {
+ var c = new Bgra32(1, 2, 3, 4);
+ var rgba = default(Rgba32);
+
+ c.ToRgba32(ref rgba);
+
+ Assert.Equal(new Rgba32(1, 2, 3, 4), rgba);
+ }
+
+ [Fact]
+ public void ToBgr24()
+ {
+ var rgb = new Bgra32(1, 2, 3, 4);
+ var bgr = default(Bgr24);
+
+ rgb.ToBgr24(ref bgr);
+
+ Assert.Equal(new Bgr24(1, 2, 3), bgr);
+ }
+
+ [Fact]
+ public void ToBgra32()
+ {
+ var rgb = new Bgra32(1, 2, 3, 4);
+ var bgra = default(Bgra32);
+
+ rgb.ToBgra32(ref bgra);
+
+ Assert.Equal(new Bgra32(1, 2, 3, 4), bgra);
+ }
}
}
\ No newline at end of file
diff --git a/tests/ImageSharp.Tests/PixelFormats/Rgb24Tests.cs b/tests/ImageSharp.Tests/PixelFormats/Rgb24Tests.cs
index 6118e4432c..1d0d024fbb 100644
--- a/tests/ImageSharp.Tests/PixelFormats/Rgb24Tests.cs
+++ b/tests/ImageSharp.Tests/PixelFormats/Rgb24Tests.cs
@@ -1,6 +1,9 @@
// ReSharper disable InconsistentNaming
namespace ImageSharp.Tests
{
+ using System;
+ using System.Numerics;
+
using ImageSharp.PixelFormats;
using Xunit;
@@ -32,34 +35,109 @@ namespace ImageSharp.Tests
Assert.Equal(3, ptr[2]);
}
- public class Equality
+ [Theory]
+ [MemberData(nameof(ColorData))]
+ public void Equals_WhenTrue(byte r, byte g, byte b)
+ {
+ var x = new Rgb24(r, g, b);
+ var y = new Rgb24(r, g, b);
+
+ Assert.True(x.Equals(y));
+ Assert.True(x.Equals((object)y));
+ Assert.Equal(x.GetHashCode(), y.GetHashCode());
+ }
+
+ [Theory]
+ [InlineData(1, 2, 3, 1, 2, 4)]
+ [InlineData(0, 255, 0, 0, 244, 0)]
+ [InlineData(1, 255, 0, 0, 255, 0)]
+ public void Equals_WhenFalse(byte r1, byte g1, byte b1, byte r2, byte g2, byte b2)
+ {
+ var a = new Rgb24(r1, g1, b1);
+ var b = new Rgb24(r2, g2, b2);
+
+ Assert.False(a.Equals(b));
+ Assert.False(a.Equals((object)b));
+ }
+
+ [Fact]
+ public void PackFromRgba32()
+ {
+ var rgb = default(Rgb24);
+ rgb.PackFromRgba32(new Rgba32(1, 2, 3, 4));
+
+ Assert.Equal(1, rgb.R);
+ Assert.Equal(2, rgb.G);
+ Assert.Equal(3, rgb.B);
+ }
+
+ private static Vector4 Vec(byte r, byte g, byte b, byte a = 255) => new Vector4(
+ r / 255f,
+ g / 255f,
+ b / 255f,
+ a / 255f);
+
+ [Fact]
+ public void PackFromVector4()
+ {
+ var rgb = default(Rgb24);
+ rgb.PackFromVector4(Vec(1, 2, 3, 4));
+
+ Assert.Equal(1, rgb.R);
+ Assert.Equal(2, rgb.G);
+ Assert.Equal(3, rgb.B);
+ }
+
+ [Fact]
+ public void ToVector4()
+ {
+ var rgb = new Rgb24(1, 2, 3);
+
+ Assert.Equal(Vec(1, 2, 3), rgb.ToVector4());
+ }
+
+ [Fact]
+ public void ToRgb24()
+ {
+ var rgb = new Rgb24(1, 2, 3);
+ var dest = default(Rgb24);
+
+ rgb.ToRgb24(ref dest);
+
+ Assert.Equal(rgb, dest);
+ }
+
+ [Fact]
+ public void ToRgba32()
+ {
+ var rgb = new Rgb24(1, 2, 3);
+ var rgba = default(Rgba32);
+
+ rgb.ToRgba32(ref rgba);
+
+ Assert.Equal(new Rgba32(1, 2, 3, 255), rgba);
+ }
+
+ [Fact]
+ public void ToBgr24()
+ {
+ var rgb = new Rgb24(1, 2, 3);
+ var bgr = default(Bgr24);
+
+ rgb.ToBgr24(ref bgr);
+
+ Assert.Equal(new Bgr24(1, 2, 3), bgr);
+ }
+
+ [Fact]
+ public void ToBgra32()
{
- public static TheoryData ColorData = Rgb24Tests.ColorData;
-
- [Theory]
- [MemberData(nameof(ColorData))]
- public void WhenTrue(byte r, byte g, byte b)
- {
- var x = new Rgb24(r, g, b);
- var y = new Rgb24(r, g, b);
-
- Assert.True(x.Equals(y));
- Assert.True(x.Equals((object)y));
- Assert.Equal(x.GetHashCode(), y.GetHashCode());
- }
-
- [Theory]
- [InlineData(1, 2, 3, 1, 2, 4)]
- [InlineData(0, 255, 0, 0, 244, 0)]
- [InlineData(1, 255, 0, 0, 255, 0)]
- public void WhenFalse(byte r1, byte g1, byte b1, byte r2, byte g2, byte b2)
- {
- var a = new Rgb24(r1, g1, b1);
- var b = new Rgb24(r2, g2, b2);
-
- Assert.False(a.Equals(b));
- Assert.False(a.Equals((object)b));
- }
+ var rgb = new Rgb24(1, 2, 3);
+ var bgra = default(Bgra32);
+
+ rgb.ToBgra32(ref bgra);
+
+ Assert.Equal(new Bgra32(1, 2, 3, 255), bgra);
}
}
}
\ No newline at end of file
diff --git a/tests/ImageSharp.Tests/TestUtilities/PixelTypes.cs b/tests/ImageSharp.Tests/TestUtilities/PixelTypes.cs
index 5c676d07c7..645a4dc596 100644
--- a/tests/ImageSharp.Tests/TestUtilities/PixelTypes.cs
+++ b/tests/ImageSharp.Tests/TestUtilities/PixelTypes.cs
@@ -52,6 +52,12 @@ namespace ImageSharp.Tests
Short4 = 1 << 17,
+ Rgb24 = 18,
+
+ Bgr24 = 19,
+
+ Bgra32 = 20,
+
// TODO: Add multi-flag entries by rules defined in PackedPixelConverterHelper
// "All" is handled as a separate, individual case instead of using bitwise OR