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; using System;
// ReSharper disable InconsistentNaming // ReSharper disable InconsistentNaming
namespace SixLabors.ImageSharp.Formats.Jpeg.PdfJsPort.Components namespace SixLabors.ImageSharp.Formats.Jpeg.Common.Decoder
{ {
/// <summary> /// <summary>
/// Provides information about the Adobe marker segment /// Provides information about the Adobe marker segment
/// </summary> /// </summary>
internal struct PdfJsAdobe : IEquatable<PdfJsAdobe> internal struct AdobeMarker : IEquatable<AdobeMarker>
{ {
/// <summary> /// <summary>
/// The DCT Encode Version /// The DCT Encode Version
@ -36,7 +36,7 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.PdfJsPort.Components
public byte ColorTransform; public byte ColorTransform;
/// <inheritdoc/> /// <inheritdoc/>
public bool Equals(PdfJsAdobe other) public bool Equals(AdobeMarker other)
{ {
return this.DCTEncodeVersion == other.DCTEncodeVersion return this.DCTEncodeVersion == other.DCTEncodeVersion
&& this.APP14Flags0 == other.APP14Flags0 && this.APP14Flags0 == other.APP14Flags0
@ -52,21 +52,24 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.PdfJsPort.Components
return false; return false;
} }
return obj is PdfJsAdobe && this.Equals((PdfJsAdobe)obj); return obj is AdobeMarker && this.Equals((AdobeMarker)obj);
} }
/// <inheritdoc/> /// <inheritdoc/>
public override int GetHashCode() public override int GetHashCode()
{ {
unchecked return GetHashCode(this);
{ }
// TODO: Merge and use HashCodeHelpers
int hashCode = this.DCTEncodeVersion.GetHashCode(); private static int GetHashCode(AdobeMarker marker)
hashCode = (hashCode * 397) ^ this.APP14Flags0.GetHashCode(); {
hashCode = (hashCode * 397) ^ this.APP14Flags1.GetHashCode(); return HashHelpers.Combine(
hashCode = (hashCode * 397) ^ this.ColorTransform.GetHashCode(); marker.DCTEncodeVersion.GetHashCode(),
return hashCode; 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; using System;
namespace SixLabors.ImageSharp.Formats.Jpeg.PdfJsPort.Components namespace SixLabors.ImageSharp.Formats.Jpeg.Common.Decoder
{ {
/// <summary> /// <summary>
/// Provides information about the JFIF marker segment /// Provides information about the JFIF marker segment
/// TODO: Thumbnail? /// TODO: Thumbnail?
/// </summary> /// </summary>
internal struct PdfJsJFif : IEquatable<PdfJsJFif> internal struct JFifMarker : IEquatable<JFifMarker>
{ {
/// <summary> /// <summary>
/// The major version /// The major version
@ -40,7 +40,7 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.PdfJsPort.Components
public short YDensity; public short YDensity;
/// <inheritdoc/> /// <inheritdoc/>
public bool Equals(PdfJsJFif other) public bool Equals(JFifMarker other)
{ {
return this.MajorVersion == other.MajorVersion return this.MajorVersion == other.MajorVersion
&& this.MinorVersion == other.MinorVersion && this.MinorVersion == other.MinorVersion
@ -57,21 +57,24 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.PdfJsPort.Components
return false; return false;
} }
return obj is PdfJsJFif && this.Equals((PdfJsJFif)obj); return obj is JFifMarker && this.Equals((JFifMarker)obj);
} }
/// <inheritdoc/> /// <inheritdoc/>
public override int GetHashCode() public override int GetHashCode()
{ {
unchecked return GetHashCode(this);
{ }
int hashCode = this.MajorVersion.GetHashCode();
hashCode = (hashCode * 397) ^ this.MinorVersion.GetHashCode(); private static int GetHashCode(JFifMarker marker)
hashCode = (hashCode * 397) ^ this.DensityUnits.GetHashCode(); {
hashCode = (hashCode * 397) ^ this.XDensity.GetHashCode(); return HashHelpers.Combine(
hashCode = (hashCode * 397) ^ this.YDensity.GetHashCode(); marker.MajorVersion.GetHashCode(),
return hashCode; 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; 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> /// <summary>
/// Describes Adobe specific markers <see href="http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/JPEG.html#Adobe"/> /// Describes Adobe specific markers <see href="http://www.sno.phy.queensu.ca/~phil/exiftool/TagNames/JPEG.html#Adobe"/>
/// </summary> /// </summary>

11
src/ImageSharp/Formats/Jpeg/PdfJsPort/PdfJsJpegDecoderCore.cs

@ -5,6 +5,7 @@ using System;
using System.IO; using System.IO;
using System.Runtime.CompilerServices; using System.Runtime.CompilerServices;
using SixLabors.ImageSharp.Advanced; using SixLabors.ImageSharp.Advanced;
using SixLabors.ImageSharp.Formats.Jpeg.Common.Decoder;
using SixLabors.ImageSharp.Formats.Jpeg.PdfJsPort.Components; using SixLabors.ImageSharp.Formats.Jpeg.PdfJsPort.Components;
using SixLabors.ImageSharp.Memory; using SixLabors.ImageSharp.Memory;
using SixLabors.ImageSharp.MetaData; using SixLabors.ImageSharp.MetaData;
@ -53,12 +54,12 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.PdfJsPort
/// <summary> /// <summary>
/// Contains information about the JFIF marker /// Contains information about the JFIF marker
/// </summary> /// </summary>
private PdfJsJFif jFif; private JFifMarker jFif;
/// <summary> /// <summary>
/// Contains information about the Adobe marker /// Contains information about the Adobe marker
/// </summary> /// </summary>
private PdfJsAdobe adobe; private AdobeMarker adobe;
/// <summary> /// <summary>
/// Initializes static members of the <see cref="PdfJsJpegDecoderCore"/> class. /// 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.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); this.FillYCbCrImage(image);
} }
@ -420,7 +421,7 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.PdfJsPort
if (isJfif) if (isJfif)
{ {
this.jFif = new PdfJsJFif this.jFif = new JFifMarker
{ {
MajorVersion = this.temp[5], MajorVersion = this.temp[5],
MinorVersion = this.temp[6], MinorVersion = this.temp[6],
@ -542,7 +543,7 @@ namespace SixLabors.ImageSharp.Formats.Jpeg.PdfJsPort
if (isAdobe) if (isAdobe)
{ {
this.adobe = new PdfJsAdobe this.adobe = new AdobeMarker
{ {
DCTEncodeVersion = (short)((this.temp[5] << 8) | this.temp[6]), DCTEncodeVersion = (short)((this.temp[5] << 8) | this.temp[6]),
APP14Flags0 = (short)((this.temp[7] << 8) | this.temp[8]), APP14Flags0 = (short)((this.temp[7] << 8) | this.temp[8]),

Loading…
Cancel
Save