Browse Source

Make markers common

pull/348/head
James Jackson-South 9 years ago
parent
commit
5bc6ff0f7b
  1. 29
      src/ImageSharp/Formats/Jpeg/Common/Decoder/AdobeMarker.cs
  2. 29
      src/ImageSharp/Formats/Jpeg/Common/Decoder/JFifMarker.cs
  3. 26
      src/ImageSharp/Formats/Jpeg/GolangPort/OrigJpegConstants.cs
  4. 11
      src/ImageSharp/Formats/Jpeg/PdfJsPort/PdfJsJpegDecoderCore.cs

29
src/ImageSharp/Formats/Jpeg/PdfJsPort/Components/PdfJsAdobe.cs → 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
{
/// <summary>
/// Provides information about the Adobe marker segment
/// </summary>
internal struct PdfJsAdobe : IEquatable<PdfJsAdobe>
internal struct AdobeMarker : IEquatable<AdobeMarker>
{
/// <summary>
/// The DCT Encode Version
@ -36,7 +36,7 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.PdfJsPort.Components
public byte ColorTransform;
/// <inheritdoc/>
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);
}
/// <inheritdoc/>
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())));
}
}
}

29
src/ImageSharp/Formats/Jpeg/PdfJsPort/Components/PdfJsJFif.cs → 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
{
/// <summary>
/// Provides information about the JFIF marker segment
/// TODO: Thumbnail?
/// </summary>
internal struct PdfJsJFif : IEquatable<PdfJsJFif>
internal struct JFifMarker : IEquatable<JFifMarker>
{
/// <summary>
/// The major version
@ -40,7 +40,7 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.PdfJsPort.Components
public short YDensity;
/// <inheritdoc/>
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);
}
/// <inheritdoc/>
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))));
}
}
}

26
src/ImageSharp/Formats/Jpeg/GolangPort/OrigJpegConstants.cs

@ -165,6 +165,32 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.GolangPort
public const byte APP15 = 0xef;
}
/// <summary>
/// Contains JFIF specific markers
/// </summary>
public static class JFif
{
/// <summary>
/// Represents J in ASCII
/// </summary>
public const byte J = 0x4A;
/// <summary>
/// Represents F in ASCII
/// </summary>
public const byte F = 0x46;
/// <summary>
/// Represents I in ASCII
/// </summary>
public const byte I = 0x49;
/// <summary>
/// Represents the null "0" marker
/// </summary>
public const byte Null = 0x0;
}
/// <summary>
/// Describes Adobe specific markers <see href="http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/JPEG.html#Adobe"/>
/// </summary>

11
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
/// <summary>
/// Contains information about the JFIF marker
/// </summary>
private PdfJsJFif jFif;
private JFifMarker jFif;
/// <summary>
/// Contains information about the Adobe marker
/// </summary>
private PdfJsAdobe adobe;
private AdobeMarker adobe;
/// <summary>
/// Initializes static members of the <see cref="PdfJsJpegDecoderCore"/> 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]),

Loading…
Cancel
Save