diff --git a/src/ImageSharp/Common/Helpers/ImageMaths.cs b/src/ImageSharp/Common/Helpers/ImageMaths.cs
index 1dc740567..6c52eded5 100644
--- a/src/ImageSharp/Common/Helpers/ImageMaths.cs
+++ b/src/ImageSharp/Common/Helpers/ImageMaths.cs
@@ -37,7 +37,7 @@ namespace SixLabors.ImageSharp
///
/// Scales a value from a 16 bit to it's 8 bit equivalent.
///
- /// The 8 bit compoonent value.
+ /// The 8 bit component value.
/// The
[MethodImpl(InliningOptions.ShortMethod)]
public static byte DownScaleFrom16BitTo8Bit(ushort component)
diff --git a/src/ImageSharp/PixelFormats/Gray16.cs b/src/ImageSharp/PixelFormats/Gray16.cs
index 34f221d79..788278be4 100644
--- a/src/ImageSharp/PixelFormats/Gray16.cs
+++ b/src/ImageSharp/PixelFormats/Gray16.cs
@@ -136,10 +136,13 @@ namespace SixLabors.ImageSharp.PixelFormats
///
[MethodImpl(InliningOptions.ShortMethod)]
- public Rgba32 ToRgba32()
+ public void ToRgba32(ref Rgba32 dest)
{
byte rgb = ImageMaths.DownScaleFrom16BitTo8Bit(this.PackedValue);
- return new Rgba32(rgb, rgb, rgb, byte.MaxValue);
+ dest.R = rgb;
+ dest.G = rgb;
+ dest.B = rgb;
+ dest.A = byte.MaxValue;
}
///
diff --git a/src/ImageSharp/PixelFormats/Gray8.cs b/src/ImageSharp/PixelFormats/Gray8.cs
index 581240587..8a9ec540d 100644
--- a/src/ImageSharp/PixelFormats/Gray8.cs
+++ b/src/ImageSharp/PixelFormats/Gray8.cs
@@ -108,7 +108,13 @@ namespace SixLabors.ImageSharp.PixelFormats
///
[MethodImpl(InliningOptions.ShortMethod)]
- public Rgba32 ToRgba32() => new Rgba32(this.PackedValue, this.PackedValue, this.PackedValue, byte.MaxValue);
+ public void ToRgba32(ref Rgba32 dest)
+ {
+ dest.R = this.PackedValue;
+ dest.G = this.PackedValue;
+ dest.B = this.PackedValue;
+ dest.A = byte.MaxValue;
+ }
///
[MethodImpl(InliningOptions.ShortMethod)]
diff --git a/src/ImageSharp/PixelFormats/Rgb24.cs b/src/ImageSharp/PixelFormats/Rgb24.cs
index a2b896605..0113027d6 100644
--- a/src/ImageSharp/PixelFormats/Rgb24.cs
+++ b/src/ImageSharp/PixelFormats/Rgb24.cs
@@ -165,7 +165,13 @@ namespace SixLabors.ImageSharp.PixelFormats
///
[MethodImpl(InliningOptions.ShortMethod)]
- public Rgba32 ToRgba32() => new Rgba32(this.R, this.G, this.B, byte.MaxValue);
+ public void ToRgba32(ref Rgba32 dest)
+ {
+ dest.R = this.R;
+ dest.G = this.G;
+ dest.B = this.B;
+ dest.A = byte.MaxValue;
+ }
///
[MethodImpl(InliningOptions.ShortMethod)]
diff --git a/src/ImageSharp/PixelFormats/Rgb48.cs b/src/ImageSharp/PixelFormats/Rgb48.cs
index 7406fda42..815bf8c91 100644
--- a/src/ImageSharp/PixelFormats/Rgb48.cs
+++ b/src/ImageSharp/PixelFormats/Rgb48.cs
@@ -165,12 +165,12 @@ namespace SixLabors.ImageSharp.PixelFormats
///
[MethodImpl(InliningOptions.ShortMethod)]
- public Rgba32 ToRgba32()
+ public void ToRgba32(ref Rgba32 dest)
{
- byte r = ImageMaths.DownScaleFrom16BitTo8Bit(this.R);
- byte g = ImageMaths.DownScaleFrom16BitTo8Bit(this.G);
- byte b = ImageMaths.DownScaleFrom16BitTo8Bit(this.B);
- return new Rgba32(r, g, b, byte.MaxValue);
+ dest.R = ImageMaths.DownScaleFrom16BitTo8Bit(this.R);
+ dest.G = ImageMaths.DownScaleFrom16BitTo8Bit(this.G);
+ dest.B = ImageMaths.DownScaleFrom16BitTo8Bit(this.B);
+ dest.A = byte.MaxValue;
}
///
diff --git a/src/ImageSharp/PixelFormats/Rgba32.cs b/src/ImageSharp/PixelFormats/Rgba32.cs
index 415c39c0e..e866d1350 100644
--- a/src/ImageSharp/PixelFormats/Rgba32.cs
+++ b/src/ImageSharp/PixelFormats/Rgba32.cs
@@ -301,7 +301,10 @@ namespace SixLabors.ImageSharp.PixelFormats
///
[MethodImpl(InliningOptions.ShortMethod)]
- public Rgba32 ToRgba32() => this;
+ public void ToRgba32(ref Rgba32 dest)
+ {
+ dest = this;
+ }
///
[MethodImpl(InliningOptions.ShortMethod)]
diff --git a/src/ImageSharp/PixelFormats/Rgba64.cs b/src/ImageSharp/PixelFormats/Rgba64.cs
index 738c5e3dd..2d1a67670 100644
--- a/src/ImageSharp/PixelFormats/Rgba64.cs
+++ b/src/ImageSharp/PixelFormats/Rgba64.cs
@@ -197,13 +197,12 @@ namespace SixLabors.ImageSharp.PixelFormats
///
[MethodImpl(InliningOptions.ShortMethod)]
- public Rgba32 ToRgba32()
+ public void ToRgba32(ref Rgba32 dest)
{
- byte r = ImageMaths.DownScaleFrom16BitTo8Bit(this.R);
- byte g = ImageMaths.DownScaleFrom16BitTo8Bit(this.G);
- byte b = ImageMaths.DownScaleFrom16BitTo8Bit(this.B);
- byte a = ImageMaths.DownScaleFrom16BitTo8Bit(this.A);
- return new Rgba32(r, g, b, a);
+ dest.R = ImageMaths.DownScaleFrom16BitTo8Bit(this.R);
+ dest.G = ImageMaths.DownScaleFrom16BitTo8Bit(this.G);
+ dest.B = ImageMaths.DownScaleFrom16BitTo8Bit(this.B);
+ dest.A = ImageMaths.DownScaleFrom16BitTo8Bit(this.A);
}
///