diff --git a/src/ImageSharp/Formats/Jpeg/PdfJsPort/Components/PdfJsAdobe.cs b/src/ImageSharp/Formats/Jpeg/Common/Decoder/AdobeMarker.cs
similarity index 67%
rename from src/ImageSharp/Formats/Jpeg/PdfJsPort/Components/PdfJsAdobe.cs
rename to src/ImageSharp/Formats/Jpeg/Common/Decoder/AdobeMarker.cs
index 9fba4ae9bc..84ceff7cc9 100644
--- a/src/ImageSharp/Formats/Jpeg/PdfJsPort/Components/PdfJsAdobe.cs
+++ b/src/ImageSharp/Formats/Jpeg/Common/Decoder/AdobeMarker.cs
@@ -4,12 +4,12 @@
using System;
// ReSharper disable InconsistentNaming
-namespace SixLabors.ImageSharp.Formats.Jpeg.PdfJsPort.Components
+namespace SixLabors.ImageSharp.Formats.Jpeg.Common.Decoder
{
///
/// Provides information about the Adobe marker segment
///
- internal struct PdfJsAdobe : IEquatable
+ internal struct AdobeMarker : IEquatable
{
///
/// The DCT Encode Version
@@ -36,7 +36,7 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.PdfJsPort.Components
public byte ColorTransform;
///
- public bool Equals(PdfJsAdobe other)
+ public bool Equals(AdobeMarker other)
{
return this.DCTEncodeVersion == other.DCTEncodeVersion
&& this.APP14Flags0 == other.APP14Flags0
@@ -52,21 +52,24 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.PdfJsPort.Components
return false;
}
- return obj is PdfJsAdobe && this.Equals((PdfJsAdobe)obj);
+ return obj is AdobeMarker && this.Equals((AdobeMarker)obj);
}
///
public override int GetHashCode()
{
- unchecked
- {
- // TODO: Merge and use HashCodeHelpers
- int hashCode = this.DCTEncodeVersion.GetHashCode();
- hashCode = (hashCode * 397) ^ this.APP14Flags0.GetHashCode();
- hashCode = (hashCode * 397) ^ this.APP14Flags1.GetHashCode();
- hashCode = (hashCode * 397) ^ this.ColorTransform.GetHashCode();
- return hashCode;
- }
+ return GetHashCode(this);
+ }
+
+ private static int GetHashCode(AdobeMarker marker)
+ {
+ return HashHelpers.Combine(
+ marker.DCTEncodeVersion.GetHashCode(),
+ HashHelpers.Combine(
+ marker.APP14Flags0.GetHashCode(),
+ HashHelpers.Combine(
+ marker.APP14Flags1.GetHashCode(),
+ marker.ColorTransform.GetHashCode())));
}
}
}
\ No newline at end of file
diff --git a/src/ImageSharp/Formats/Jpeg/PdfJsPort/Components/PdfJsJFif.cs b/src/ImageSharp/Formats/Jpeg/Common/Decoder/JFifMarker.cs
similarity index 69%
rename from src/ImageSharp/Formats/Jpeg/PdfJsPort/Components/PdfJsJFif.cs
rename to src/ImageSharp/Formats/Jpeg/Common/Decoder/JFifMarker.cs
index 52ba81bbcc..acaa0eb53f 100644
--- a/src/ImageSharp/Formats/Jpeg/PdfJsPort/Components/PdfJsJFif.cs
+++ b/src/ImageSharp/Formats/Jpeg/Common/Decoder/JFifMarker.cs
@@ -3,13 +3,13 @@
using System;
-namespace SixLabors.ImageSharp.Formats.Jpeg.PdfJsPort.Components
+namespace SixLabors.ImageSharp.Formats.Jpeg.Common.Decoder
{
///
/// Provides information about the JFIF marker segment
/// TODO: Thumbnail?
///
- internal struct PdfJsJFif : IEquatable
+ internal struct JFifMarker : IEquatable
{
///
/// The major version
@@ -40,7 +40,7 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.PdfJsPort.Components
public short YDensity;
///
- public bool Equals(PdfJsJFif other)
+ public bool Equals(JFifMarker other)
{
return this.MajorVersion == other.MajorVersion
&& this.MinorVersion == other.MinorVersion
@@ -57,21 +57,24 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.PdfJsPort.Components
return false;
}
- return obj is PdfJsJFif && this.Equals((PdfJsJFif)obj);
+ return obj is JFifMarker && this.Equals((JFifMarker)obj);
}
///
public override int GetHashCode()
{
- unchecked
- {
- int hashCode = this.MajorVersion.GetHashCode();
- hashCode = (hashCode * 397) ^ this.MinorVersion.GetHashCode();
- hashCode = (hashCode * 397) ^ this.DensityUnits.GetHashCode();
- hashCode = (hashCode * 397) ^ this.XDensity.GetHashCode();
- hashCode = (hashCode * 397) ^ this.YDensity.GetHashCode();
- return hashCode;
- }
+ return GetHashCode(this);
+ }
+
+ private static int GetHashCode(JFifMarker marker)
+ {
+ return HashHelpers.Combine(
+ marker.MajorVersion.GetHashCode(),
+ HashHelpers.Combine(
+ marker.MinorVersion.GetHashCode(),
+ HashHelpers.Combine(
+ marker.DensityUnits.GetHashCode(),
+ HashHelpers.Combine(marker.XDensity, marker.YDensity))));
}
}
}
\ No newline at end of file
diff --git a/src/ImageSharp/Formats/Jpeg/GolangPort/OrigJpegConstants.cs b/src/ImageSharp/Formats/Jpeg/GolangPort/OrigJpegConstants.cs
index d33fe52f67..8098cc339d 100644
--- a/src/ImageSharp/Formats/Jpeg/GolangPort/OrigJpegConstants.cs
+++ b/src/ImageSharp/Formats/Jpeg/GolangPort/OrigJpegConstants.cs
@@ -165,6 +165,32 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.GolangPort
public const byte APP15 = 0xef;
}
+ ///
+ /// Contains JFIF specific markers
+ ///
+ public static class JFif
+ {
+ ///
+ /// Represents J in ASCII
+ ///
+ public const byte J = 0x4A;
+
+ ///
+ /// Represents F in ASCII
+ ///
+ public const byte F = 0x46;
+
+ ///
+ /// Represents I in ASCII
+ ///
+ public const byte I = 0x49;
+
+ ///
+ /// Represents the null "0" marker
+ ///
+ public const byte Null = 0x0;
+ }
+
///
/// Describes Adobe specific markers
///
diff --git a/src/ImageSharp/Formats/Jpeg/PdfJsPort/PdfJsJpegDecoderCore.cs b/src/ImageSharp/Formats/Jpeg/PdfJsPort/PdfJsJpegDecoderCore.cs
index 6c84597c99..8ed1e31034 100644
--- a/src/ImageSharp/Formats/Jpeg/PdfJsPort/PdfJsJpegDecoderCore.cs
+++ b/src/ImageSharp/Formats/Jpeg/PdfJsPort/PdfJsJpegDecoderCore.cs
@@ -5,6 +5,7 @@ using System;
using System.IO;
using System.Runtime.CompilerServices;
using SixLabors.ImageSharp.Advanced;
+using SixLabors.ImageSharp.Formats.Jpeg.Common.Decoder;
using SixLabors.ImageSharp.Formats.Jpeg.PdfJsPort.Components;
using SixLabors.ImageSharp.Memory;
using SixLabors.ImageSharp.MetaData;
@@ -53,12 +54,12 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.PdfJsPort
///
/// Contains information about the JFIF marker
///
- private PdfJsJFif jFif;
+ private JFifMarker jFif;
///
/// Contains information about the Adobe marker
///
- private PdfJsAdobe adobe;
+ private AdobeMarker adobe;
///
/// Initializes static members of the class.
@@ -345,7 +346,7 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.PdfJsPort
if (this.NumberOfComponents == 3)
{
- if (this.adobe.Equals(default(PdfJsAdobe)) || this.adobe.ColorTransform == PdfJsJpegConstants.Markers.Adobe.ColorTransformYCbCr)
+ if (this.adobe.Equals(default(AdobeMarker)) || this.adobe.ColorTransform == PdfJsJpegConstants.Markers.Adobe.ColorTransformYCbCr)
{
this.FillYCbCrImage(image);
}
@@ -420,7 +421,7 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.PdfJsPort
if (isJfif)
{
- this.jFif = new PdfJsJFif
+ this.jFif = new JFifMarker
{
MajorVersion = this.temp[5],
MinorVersion = this.temp[6],
@@ -542,7 +543,7 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.PdfJsPort
if (isAdobe)
{
- this.adobe = new PdfJsAdobe
+ this.adobe = new AdobeMarker
{
DCTEncodeVersion = (short)((this.temp[5] << 8) | this.temp[6]),
APP14Flags0 = (short)((this.temp[7] << 8) | this.temp[8]),