Browse Source

Replace Endianness enum with isBigEndian

pull/870/head
Jason Nelson 7 years ago
parent
commit
78f9ca50f2
  1. 21
      src/ImageSharp/IO/Endianness.cs
  2. 32
      src/ImageSharp/MetaData/Profiles/Exif/ExifReader.cs

21
src/ImageSharp/IO/Endianness.cs

@ -1,21 +0,0 @@
// Copyright (c) Six Labors and contributors.
// Licensed under the Apache License, Version 2.0.
namespace SixLabors.ImageSharp.IO
{
/// <summary>
/// Endianness of a converter
/// </summary>
internal enum Endianness
{
/// <summary>
/// Little endian - least significant byte first
/// </summary>
LittleEndian,
/// <summary>
/// Big endian - most significant byte first
/// </summary>
BigEndian
}
}

32
src/ImageSharp/MetaData/Profiles/Exif/ExifReader.cs

@ -8,20 +8,19 @@ using System.Collections.ObjectModel;
using System.Linq; using System.Linq;
using System.Runtime.CompilerServices; using System.Runtime.CompilerServices;
using System.Text; using System.Text;
using SixLabors.ImageSharp.IO;
using SixLabors.ImageSharp.Primitives; using SixLabors.ImageSharp.Primitives;
namespace SixLabors.ImageSharp.MetaData.Profiles.Exif namespace SixLabors.ImageSharp.MetaData.Profiles.Exif
{ {
/// <summary> /// <summary>
/// Reads and parses EXIF data from a byte array /// Reads and parses EXIF data from a byte array.
/// </summary> /// </summary>
internal sealed class ExifReader internal sealed class ExifReader
{ {
private List<ExifTag> invalidTags; private List<ExifTag> invalidTags;
private readonly byte[] exifData; private readonly byte[] exifData;
private int position; private int position;
private Endianness endianness = Endianness.BigEndian; private bool isBigEndian;
private uint exifOffset; private uint exifOffset;
private uint gpsOffset; private uint gpsOffset;
@ -38,12 +37,12 @@ namespace SixLabors.ImageSharp.MetaData.Profiles.Exif
public IReadOnlyList<ExifTag> InvalidTags => this.invalidTags ?? (IReadOnlyList<ExifTag>)Array.Empty<ExifTag>(); public IReadOnlyList<ExifTag> InvalidTags => this.invalidTags ?? (IReadOnlyList<ExifTag>)Array.Empty<ExifTag>();
/// <summary> /// <summary>
/// Gets the thumbnail length in the byte stream /// Gets the thumbnail length in the byte stream.
/// </summary> /// </summary>
public uint ThumbnailLength { get; private set; } public uint ThumbnailLength { get; private set; }
/// <summary> /// <summary>
/// Gets the thumbnail offset position in the byte stream /// Gets the thumbnail offset position in the byte stream.
/// </summary> /// </summary>
public uint ThumbnailOffset { get; private set; } public uint ThumbnailOffset { get; private set; }
@ -74,10 +73,7 @@ namespace SixLabors.ImageSharp.MetaData.Profiles.Exif
var values = new List<ExifValue>(); var values = new List<ExifValue>();
// II == 0x4949 // II == 0x4949
if (this.ReadUInt16() == 0x4949) this.isBigEndian = !(this.ReadUInt16() == 0x4949);
{
this.endianness = Endianness.LittleEndian;
}
if (this.ReadUInt16() != 0x002A) if (this.ReadUInt16() != 0x002A)
{ {
@ -382,7 +378,7 @@ namespace SixLabors.ImageSharp.MetaData.Profiles.Exif
[MethodImpl(InliningOptions.ShortMethod)] [MethodImpl(InliningOptions.ShortMethod)]
private TEnum ToEnum<TEnum>(int value, TEnum defaultValue) private TEnum ToEnum<TEnum>(int value, TEnum defaultValue)
where TEnum : struct where TEnum : struct, Enum
{ {
if (EnumHelper<TEnum>.IsDefined(value)) if (EnumHelper<TEnum>.IsDefined(value))
{ {
@ -458,7 +454,7 @@ namespace SixLabors.ImageSharp.MetaData.Profiles.Exif
return default; return default;
} }
long intValue = this.endianness == Endianness.BigEndian long intValue = this.isBigEndian
? BinaryPrimitives.ReadInt64BigEndian(buffer) ? BinaryPrimitives.ReadInt64BigEndian(buffer)
: BinaryPrimitives.ReadInt64LittleEndian(buffer); : BinaryPrimitives.ReadInt64LittleEndian(buffer);
@ -473,7 +469,7 @@ namespace SixLabors.ImageSharp.MetaData.Profiles.Exif
return default; return default;
} }
return this.endianness == Endianness.BigEndian return this.isBigEndian
? BinaryPrimitives.ReadUInt32BigEndian(buffer) ? BinaryPrimitives.ReadUInt32BigEndian(buffer)
: BinaryPrimitives.ReadUInt32LittleEndian(buffer); : BinaryPrimitives.ReadUInt32LittleEndian(buffer);
} }
@ -485,7 +481,7 @@ namespace SixLabors.ImageSharp.MetaData.Profiles.Exif
return default; return default;
} }
return this.endianness == Endianness.BigEndian return this.isBigEndian
? BinaryPrimitives.ReadUInt16BigEndian(buffer) ? BinaryPrimitives.ReadUInt16BigEndian(buffer)
: BinaryPrimitives.ReadUInt16LittleEndian(buffer); : BinaryPrimitives.ReadUInt16LittleEndian(buffer);
} }
@ -497,7 +493,7 @@ namespace SixLabors.ImageSharp.MetaData.Profiles.Exif
return default; return default;
} }
int intValue = this.endianness == Endianness.BigEndian int intValue = this.isBigEndian
? BinaryPrimitives.ReadInt32BigEndian(buffer) ? BinaryPrimitives.ReadInt32BigEndian(buffer)
: BinaryPrimitives.ReadInt32LittleEndian(buffer); : BinaryPrimitives.ReadInt32LittleEndian(buffer);
@ -526,7 +522,7 @@ namespace SixLabors.ImageSharp.MetaData.Profiles.Exif
return default; return default;
} }
return this.endianness == Endianness.BigEndian return this.isBigEndian
? BinaryPrimitives.ReadInt32BigEndian(buffer) ? BinaryPrimitives.ReadInt32BigEndian(buffer)
: BinaryPrimitives.ReadInt32LittleEndian(buffer); : BinaryPrimitives.ReadInt32LittleEndian(buffer);
} }
@ -551,13 +547,13 @@ namespace SixLabors.ImageSharp.MetaData.Profiles.Exif
return default; return default;
} }
return this.endianness == Endianness.BigEndian return this.isBigEndian
? BinaryPrimitives.ReadInt16BigEndian(buffer) ? BinaryPrimitives.ReadInt16BigEndian(buffer)
: BinaryPrimitives.ReadInt16LittleEndian(buffer); : BinaryPrimitives.ReadInt16LittleEndian(buffer);
} }
private class EnumHelper<TEnum> private sealed class EnumHelper<TEnum>
where TEnum : struct where TEnum : struct, Enum
{ {
private static readonly int[] Values = Enum.GetValues(typeof(TEnum)).Cast<TEnum>() private static readonly int[] Values = Enum.GetValues(typeof(TEnum)).Cast<TEnum>()
.Select(e => Convert.ToInt32(e)).OrderBy(e => e).ToArray(); .Select(e => Convert.ToInt32(e)).OrderBy(e => e).ToArray();

Loading…
Cancel
Save