diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md
index ff3c9605c6..188c11ff31 100644
--- a/.github/CONTRIBUTING.md
+++ b/.github/CONTRIBUTING.md
@@ -1,10 +1,10 @@
-# How to contribute to ImageSHarp
+# How to contribute to ImageSharp
#### **Did you find a bug?**
-- Please **ensure the bug was not already reported** by searching on GitHub under [Issues](https://github.com/JimBobSquarePants/ImageSharp/issues).
+- Please **ensure the bug was not already reported** by searching on GitHub under [Issues](https://github.com/SixLabors/ImageSharp/issues).
-- If you're unable to find an open issue addressing the problem, please [open a new one](https://github.com/JimBobSquarePants/ImageSharp/issues/new). Be sure to include a **title, the applicable version, a clear description**, as much relevant information as possible, and a **code sample** or an **executable test case** demonstrating the expected behavior that is not occurring. Please do not hijack existing issues.
+- If you're unable to find an open issue addressing the problem, please [open a new one](https://github.com/SixLabors/ImageSharp/issues/new). Be sure to include a **title, the applicable version, a clear description**, as much relevant information as possible, and a **code sample** or an **executable test case** demonstrating the expected behavior that is not occurring. Please do not hijack existing issues.
#### **Did you write a patch that fixes a bug?**
diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md
index e2c1276eb8..a172605e64 100644
--- a/.github/ISSUE_TEMPLATE.md
+++ b/.github/ISSUE_TEMPLATE.md
@@ -3,7 +3,7 @@
- [ ] I have written a descriptive issue title
- [ ] I have verified that I am running the latest version of ImageSharp
- [ ] I have verified if the problem exist in both `DEBUG` and `RELEASE` mode
-- [ ] I have searched [open](https://github.com/JimBobSquarePants/ImageSharp/issuess) and [closed](https://github.com/JimBobSquarePants/ImageSharp/issues?q=is%3Aissue+is%3Aclosed) issues to ensure it has not already been reported
+- [ ] I have searched [open](https://github.com/SixLabors/ImageSharp/issues) and [closed](https://github.com/SixLabors/ImageSharp/issues?q=is%3Aissue+is%3Aclosed) issues to ensure it has not already been reported
### Description
diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md
index 4f87647ffc..4be3511650 100644
--- a/.github/PULL_REQUEST_TEMPLATE.md
+++ b/.github/PULL_REQUEST_TEMPLATE.md
@@ -1,8 +1,8 @@
### Prerequisites
- [ ] I have written a descriptive pull-request title
-- [ ] I have verified that there are no overlapping [pull-requests](https://github.com/JimBobSquarePants/ImageSharp/pulls) open
-- [ ] I have verified that I am following matches the existing coding patterns and practise as demonstrated in the repository. These follow strict Stylecop rules :cop:.
+- [ ] I have verified that there are no overlapping [pull-requests](https://github.com/SixLabors/ImageSharp/pulls) open
+- [ ] I have verified that I am following matches the existing coding patterns and practice as demonstrated in the repository. These follow strict Stylecop rules :cop:.
- [ ] I have provided test coverage for my change (where applicable)
### Description
diff --git a/ImageSharp.sln b/ImageSharp.sln
index 60fcca80d7..4ea89dd450 100644
--- a/ImageSharp.sln
+++ b/ImageSharp.sln
@@ -2,6 +2,7 @@
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.26730.3
+VisualStudioVersion = 15.0.26730.12
MinimumVisualStudioVersion = 10.0.40219.1
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "SolutionItems", "SolutionItems", "{C317F1B1-D75E-4C6D-83EB-80367343E0D7}"
ProjectSection(SolutionItems) = preProject
@@ -14,7 +15,9 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "SolutionItems", "SolutionIt
features.md = features.md
ImageSharp.ruleset = ImageSharp.ruleset
ImageSharp.sln.DotSettings = ImageSharp.sln.DotSettings
+ .github\ISSUE_TEMPLATE.md = .github\ISSUE_TEMPLATE.md
NuGet.config = NuGet.config
+ .github\PULL_REQUEST_TEMPLATE.md = .github\PULL_REQUEST_TEMPLATE.md
README.md = README.md
EndProjectSection
EndProject
diff --git a/src/ImageSharp/Configuration.cs b/src/ImageSharp/Configuration.cs
index a25f2573d8..7401035331 100644
--- a/src/ImageSharp/Configuration.cs
+++ b/src/ImageSharp/Configuration.cs
@@ -77,6 +77,11 @@ namespace SixLabors.ImageSharp
///
public ParallelOptions ParallelOptions { get; } = new ParallelOptions { MaxDegreeOfParallelism = Environment.ProcessorCount };
+ ///
+ /// Gets the currently registered s.
+ ///
+ public IEnumerable ImageFormats => this.imageFormats;
+
///
/// Gets the maximum header size of all the formats.
///
@@ -97,11 +102,6 @@ namespace SixLabors.ImageSharp
///
internal IEnumerable> ImageEncoders => this.mimeTypeEncoders;
- ///
- /// Gets the currently registered s.
- ///
- internal IEnumerable ImageFormats => this.imageFormats;
-
#if !NETSTANDARD1_1
///
/// Gets or sets the filesystem helper for accessing the local file system.
@@ -201,29 +201,12 @@ namespace SixLabors.ImageSharp
this.SetMaxHeaderSize();
}
- ///
- /// Creates the default instance with the following s preregistered:
- ///
- ///
- ///
- ///
- ///
- /// The default configuration of
- internal static Configuration CreateDefaultInstance()
- {
- return new Configuration(
- new PngConfigurationModule(),
- new JpegConfigurationModule(),
- new GifConfigurationModule(),
- new BmpConfigurationModule());
- }
-
///
/// For the specified mime type find the decoder.
///
/// The format to discover
/// The if found otherwise null
- internal IImageDecoder FindDecoder(IImageFormat format)
+ public IImageDecoder FindDecoder(IImageFormat format)
{
Guard.NotNull(format, nameof(format));
if (this.mimeTypeDecoders.TryGetValue(format, out IImageDecoder decoder))
@@ -239,7 +222,7 @@ namespace SixLabors.ImageSharp
///
/// The format to discover
/// The if found otherwise null
- internal IImageEncoder FindEncoder(IImageFormat format)
+ public IImageEncoder FindEncoder(IImageFormat format)
{
Guard.NotNull(format, nameof(format));
if (this.mimeTypeEncoders.TryGetValue(format, out IImageEncoder encoder))
@@ -250,6 +233,23 @@ namespace SixLabors.ImageSharp
return null;
}
+ ///
+ /// Creates the default instance with the following s preregistered:
+ ///
+ ///
+ ///
+ ///
+ ///
+ /// The default configuration of
+ internal static Configuration CreateDefaultInstance()
+ {
+ return new Configuration(
+ new PngConfigurationModule(),
+ new JpegConfigurationModule(),
+ new GifConfigurationModule(),
+ new BmpConfigurationModule());
+ }
+
///
/// Sets the max header size.
///
diff --git a/src/ImageSharp/Formats/Bmp/BmpDecoderCore.cs b/src/ImageSharp/Formats/Bmp/BmpDecoderCore.cs
index 07e17680a2..625b2a3a83 100644
--- a/src/ImageSharp/Formats/Bmp/BmpDecoderCore.cs
+++ b/src/ImageSharp/Formats/Bmp/BmpDecoderCore.cs
@@ -373,11 +373,18 @@ namespace SixLabors.ImageSharp.Formats.Bmp
// read header size
this.currentStream.Read(data, 0, BmpInfoHeader.HeaderSizeSize);
int headerSize = BitConverter.ToInt32(data, 0);
- if (headerSize < BmpInfoHeader.HeaderSizeSize || headerSize > BmpInfoHeader.MaxHeaderSize)
+ if (headerSize < BmpInfoHeader.BitmapCoreHeaderSize)
{
throw new NotSupportedException($"This kind of bitmap files (header size $headerSize) is not supported.");
}
+ int skipAmmount = 0;
+ if (headerSize > BmpInfoHeader.MaxHeaderSize)
+ {
+ skipAmmount = headerSize - BmpInfoHeader.MaxHeaderSize;
+ headerSize = BmpInfoHeader.MaxHeaderSize;
+ }
+
// read the rest of the header
this.currentStream.Read(data, BmpInfoHeader.HeaderSizeSize, headerSize - BmpInfoHeader.HeaderSizeSize);
@@ -386,14 +393,23 @@ namespace SixLabors.ImageSharp.Formats.Bmp
case BmpInfoHeader.BitmapCoreHeaderSize:
this.infoHeader = this.ParseBitmapCoreHeader(data);
break;
-
case BmpInfoHeader.BitmapInfoHeaderSize:
this.infoHeader = this.ParseBitmapInfoHeader(data);
break;
-
default:
- throw new NotSupportedException($"This kind of bitmap files (header size $headerSize) is not supported.");
+ if (headerSize > BmpInfoHeader.BitmapInfoHeaderSize)
+ {
+ this.infoHeader = this.ParseBitmapInfoHeader(data);
+ break;
+ }
+ else
+ {
+ throw new NotSupportedException($"This kind of bitmap files (header size $headerSize) is not supported.");
+ }
}
+
+ // skip the remaining header because we can't read those parts
+ this.currentStream.Skip(skipAmmount);
}
///
diff --git a/src/ImageSharp/Formats/Png/Filters/PaethFilter.cs b/src/ImageSharp/Formats/Png/Filters/PaethFilter.cs
index 5b41558cde..630aa56ee5 100644
--- a/src/ImageSharp/Formats/Png/Filters/PaethFilter.cs
+++ b/src/ImageSharp/Formats/Png/Filters/PaethFilter.cs
@@ -29,22 +29,21 @@ namespace SixLabors.ImageSharp.Formats.Png.Filters
ref byte prevBaseRef = ref previousScanline.DangerousGetPinnableReference();
// Paeth(x) + PaethPredictor(Raw(x-bpp), Prior(x), Prior(x-bpp))
- for (int x = 1; x < scanline.Length; x++)
+ int offset = bytesPerPixel + 1;
+ for (int x = 1; x < offset; x++)
{
- if (x - bytesPerPixel < 1)
- {
- ref byte scan = ref Unsafe.Add(ref scanBaseRef, x);
- byte above = Unsafe.Add(ref prevBaseRef, x);
- scan = (byte)((scan + PaethPredicator(0, above, 0)) % 256);
- }
- else
- {
- ref byte scan = ref Unsafe.Add(ref scanBaseRef, x);
- byte left = Unsafe.Add(ref scanBaseRef, x - bytesPerPixel);
- byte above = Unsafe.Add(ref prevBaseRef, x);
- byte upperLeft = Unsafe.Add(ref prevBaseRef, x - bytesPerPixel);
- scan = (byte)((scan + PaethPredicator(left, above, upperLeft)) % 256);
- }
+ ref byte scan = ref Unsafe.Add(ref scanBaseRef, x);
+ byte above = Unsafe.Add(ref prevBaseRef, x);
+ scan = (byte)(scan + above);
+ }
+
+ for (int x = offset; x < scanline.Length; x++)
+ {
+ ref byte scan = ref Unsafe.Add(ref scanBaseRef, x);
+ byte left = Unsafe.Add(ref scanBaseRef, x - bytesPerPixel);
+ byte above = Unsafe.Add(ref prevBaseRef, x);
+ byte upperLeft = Unsafe.Add(ref prevBaseRef, x - bytesPerPixel);
+ scan = (byte)(scan + PaethPredicator(left, above, upperLeft));
}
}
diff --git a/src/ImageSharp/Formats/Png/PngDecoderCore.cs b/src/ImageSharp/Formats/Png/PngDecoderCore.cs
index 2427da2572..ad70a950a2 100644
--- a/src/ImageSharp/Formats/Png/PngDecoderCore.cs
+++ b/src/ImageSharp/Formats/Png/PngDecoderCore.cs
@@ -272,7 +272,7 @@ namespace SixLabors.ImageSharp.Formats.Png
/// is less than or equals than zero.
private static Span ToArrayByBitsLength(Span source, int bytesPerScanline, int bits)
{
- Guard.NotNull(source, nameof(source));
+ Guard.MustBeGreaterThan(source.Length, 0, nameof(source));
Guard.MustBeGreaterThan(bits, 0, nameof(bits));
if (bits >= 8)
@@ -515,7 +515,7 @@ namespace SixLabors.ImageSharp.Formats.Png
this.currentRowBytesRead = 0;
Span scanSpan = this.scanline.Slice(0, bytesPerInterlaceScanline);
- Span prevSpan = this.previousScanline.Span.Slice(0, bytesPerInterlaceScanline);
+ Span prevSpan = this.previousScanline.Slice(0, bytesPerInterlaceScanline);
var filterType = (FilterType)scanSpan[0];
switch (filterType)
@@ -556,12 +556,15 @@ namespace SixLabors.ImageSharp.Formats.Png
}
this.pass++;
+ this.previousScanline.Clear();
+
if (this.pass < 7)
{
this.currentRow = Adam7FirstRow[this.pass];
}
else
{
+ this.pass = 0;
break;
}
}
diff --git a/src/ImageSharp/MetaData/Profiles/ICC/DataReader/IccDataReader.TagDataEntry.cs b/src/ImageSharp/MetaData/Profiles/ICC/DataReader/IccDataReader.TagDataEntry.cs
index 9d92d5341c..5c14448fa5 100644
--- a/src/ImageSharp/MetaData/Profiles/ICC/DataReader/IccDataReader.TagDataEntry.cs
+++ b/src/ImageSharp/MetaData/Profiles/ICC/DataReader/IccDataReader.TagDataEntry.cs
@@ -474,19 +474,7 @@ namespace SixLabors.ImageSharp.MetaData.Profiles.Icc
string languageCode = this.ReadAsciiString(2);
string countryCode = this.ReadAsciiString(2);
- if (string.IsNullOrWhiteSpace(languageCode))
- {
- culture[i] = CultureInfo.InvariantCulture;
- }
- else if (string.IsNullOrWhiteSpace(countryCode))
- {
- culture[i] = new CultureInfo(languageCode);
- }
- else
- {
- culture[i] = new CultureInfo($"{languageCode}-{countryCode}");
- }
-
+ culture[i] = ReadCulture(languageCode, countryCode);
length[i] = this.ReadUInt32();
offset[i] = this.ReadUInt32();
}
@@ -498,6 +486,36 @@ namespace SixLabors.ImageSharp.MetaData.Profiles.Icc
}
return new IccMultiLocalizedUnicodeTagDataEntry(text);
+
+ CultureInfo ReadCulture(string language, string country)
+ {
+ if (string.IsNullOrWhiteSpace(language))
+ {
+ return CultureInfo.InvariantCulture;
+ }
+ else if (string.IsNullOrWhiteSpace(country))
+ {
+ try
+ {
+ return new CultureInfo(language);
+ }
+ catch (CultureNotFoundException)
+ {
+ return CultureInfo.InvariantCulture;
+ }
+ }
+ else
+ {
+ try
+ {
+ return new CultureInfo($"{language}-{country}");
+ }
+ catch (CultureNotFoundException)
+ {
+ return ReadCulture(language, null);
+ }
+ }
+ }
}
///
diff --git a/tests/ImageSharp.Benchmarks/ImageSharp.Benchmarks.csproj b/tests/ImageSharp.Benchmarks/ImageSharp.Benchmarks.csproj
index 0db2fe569f..4be2c67d5b 100644
--- a/tests/ImageSharp.Benchmarks/ImageSharp.Benchmarks.csproj
+++ b/tests/ImageSharp.Benchmarks/ImageSharp.Benchmarks.csproj
@@ -15,7 +15,7 @@
-
+
diff --git a/tests/ImageSharp.Sandbox46/ImageSharp.Sandbox46.csproj b/tests/ImageSharp.Sandbox46/ImageSharp.Sandbox46.csproj
index 93336b2b49..9659ad0f5d 100644
--- a/tests/ImageSharp.Sandbox46/ImageSharp.Sandbox46.csproj
+++ b/tests/ImageSharp.Sandbox46/ImageSharp.Sandbox46.csproj
@@ -20,6 +20,10 @@
+
+
+
+
diff --git a/tests/ImageSharp.Tests/ImageSharp.Tests.csproj b/tests/ImageSharp.Tests/ImageSharp.Tests.csproj
index e8a6e8c596..da9a08397f 100644
--- a/tests/ImageSharp.Tests/ImageSharp.Tests.csproj
+++ b/tests/ImageSharp.Tests/ImageSharp.Tests.csproj
@@ -24,6 +24,10 @@
+
+
+
+
diff --git a/tests/ImageSharp.Tests/TestDataIcc/IccTestDataTagDataEntry.cs b/tests/ImageSharp.Tests/TestDataIcc/IccTestDataTagDataEntry.cs
index 9d5e621aa0..f7c4efa928 100644
--- a/tests/ImageSharp.Tests/TestDataIcc/IccTestDataTagDataEntry.cs
+++ b/tests/ImageSharp.Tests/TestDataIcc/IccTestDataTagDataEntry.cs
@@ -454,15 +454,46 @@ namespace SixLabors.ImageSharp.Tests
#region MultiLocalizedUnicodeTagDataEntry
- private static readonly IccLocalizedString LocalizedString_Rand_enUs = new IccLocalizedString(new CultureInfo("en-US"), IccTestDataPrimitives.Unicode_ValRand2);
- private static readonly IccLocalizedString LocalizedString_Rand_deDE = new IccLocalizedString(new CultureInfo("de-DE"), IccTestDataPrimitives.Unicode_ValRand3);
- private static readonly IccLocalizedString LocalizedString_Rand2_deDE = new IccLocalizedString(new CultureInfo("de-DE"), IccTestDataPrimitives.Unicode_ValRand2);
- private static readonly IccLocalizedString LocalizedString_Rand_en = new IccLocalizedString(new CultureInfo("en"), IccTestDataPrimitives.Unicode_ValRand2);
+ private static readonly IccLocalizedString LocalizedString_Rand_enUS = CreateLocalizedString("en", "US", IccTestDataPrimitives.Unicode_ValRand2);
+ private static readonly IccLocalizedString LocalizedString_Rand_deDE = CreateLocalizedString("de", "DE", IccTestDataPrimitives.Unicode_ValRand3);
+ private static readonly IccLocalizedString LocalizedString_Rand2_deDE = CreateLocalizedString("de", "DE", IccTestDataPrimitives.Unicode_ValRand2);
+ private static readonly IccLocalizedString LocalizedString_Rand2_esXL = CreateLocalizedString("es", "XL", IccTestDataPrimitives.Unicode_ValRand2);
+ private static readonly IccLocalizedString LocalizedString_Rand2_xyXL = CreateLocalizedString("xy", "XL", IccTestDataPrimitives.Unicode_ValRand2);
+ private static readonly IccLocalizedString LocalizedString_Rand_en = CreateLocalizedString("en", null, IccTestDataPrimitives.Unicode_ValRand2);
private static readonly IccLocalizedString LocalizedString_Rand_Invariant = new IccLocalizedString(CultureInfo.InvariantCulture, IccTestDataPrimitives.Unicode_ValRand3);
- private static readonly IccLocalizedString[] LocalizedString_RandArr_enUs_deDE = new IccLocalizedString[]
+ private static IccLocalizedString CreateLocalizedString(string language, string country, string text)
{
- LocalizedString_Rand_enUs,
+ CultureInfo culture;
+ if (country == null)
+ {
+ try
+ {
+ culture = new CultureInfo(language);
+ }
+ catch (CultureNotFoundException)
+ {
+ culture = CultureInfo.InvariantCulture;
+ }
+ }
+ else
+ {
+ try
+ {
+ culture = new CultureInfo($"{language}-{country}");
+ }
+ catch (CultureNotFoundException)
+ {
+ return CreateLocalizedString(language, null, text);
+ }
+ }
+
+ return new IccLocalizedString(culture, text);
+ }
+
+ private static readonly IccLocalizedString[] LocalizedString_RandArr_enUS_deDE = new IccLocalizedString[]
+ {
+ LocalizedString_Rand_enUS,
LocalizedString_Rand_deDE,
};
private static readonly IccLocalizedString[] LocalizedString_RandArr_en_Invariant = new IccLocalizedString[]
@@ -470,13 +501,15 @@ namespace SixLabors.ImageSharp.Tests
LocalizedString_Rand_en,
LocalizedString_Rand_Invariant,
};
- private static readonly IccLocalizedString[] LocalizedString_SameArr_enUs_deDE = new IccLocalizedString[]
+ private static readonly IccLocalizedString[] LocalizedString_SameArr_enUS_deDE_esXL_xyXL = new IccLocalizedString[]
{
- LocalizedString_Rand_enUs,
- LocalizedString_Rand2_deDE
+ LocalizedString_Rand_enUS,
+ LocalizedString_Rand2_deDE,
+ LocalizedString_Rand2_esXL,
+ LocalizedString_Rand2_xyXL,
};
- public static readonly IccMultiLocalizedUnicodeTagDataEntry MultiLocalizedUnicode_Val = new IccMultiLocalizedUnicodeTagDataEntry(LocalizedString_RandArr_enUs_deDE);
+ public static readonly IccMultiLocalizedUnicodeTagDataEntry MultiLocalizedUnicode_Val = new IccMultiLocalizedUnicodeTagDataEntry(LocalizedString_RandArr_enUS_deDE);
public static readonly byte[] MultiLocalizedUnicode_Arr = ArrayHelper.Concat
(
IccTestDataPrimitives.UInt32_2,
@@ -529,19 +562,27 @@ namespace SixLabors.ImageSharp.Tests
IccTestDataPrimitives.Unicode_Rand3
);
- public static readonly IccMultiLocalizedUnicodeTagDataEntry MultiLocalizedUnicode_Val3 = new IccMultiLocalizedUnicodeTagDataEntry(LocalizedString_SameArr_enUs_deDE);
+ public static readonly IccMultiLocalizedUnicodeTagDataEntry MultiLocalizedUnicode_Val3 = new IccMultiLocalizedUnicodeTagDataEntry(LocalizedString_SameArr_enUS_deDE_esXL_xyXL);
public static readonly byte[] MultiLocalizedUnicode_Arr3 = ArrayHelper.Concat
(
- IccTestDataPrimitives.UInt32_2,
+ IccTestDataPrimitives.UInt32_4,
new byte[] { 0x00, 0x00, 0x00, 0x0C }, // 12
new byte[] { (byte)'e', (byte)'n', (byte)'U', (byte)'S' },
new byte[] { 0x00, 0x00, 0x00, 0x0C }, // 12
- new byte[] { 0x00, 0x00, 0x00, 0x28 }, // 40
+ new byte[] { 0x00, 0x00, 0x00, 0x40 }, // 64
new byte[] { (byte)'d', (byte)'e', (byte)'D', (byte)'E' },
new byte[] { 0x00, 0x00, 0x00, 0x0C }, // 12
- new byte[] { 0x00, 0x00, 0x00, 0x28 }, // 40
+ new byte[] { 0x00, 0x00, 0x00, 0x40 }, // 64
+
+ new byte[] { (byte)'e', (byte)'s', (byte)'X', (byte)'L' },
+ new byte[] { 0x00, 0x00, 0x00, 0x0C }, // 12
+ new byte[] { 0x00, 0x00, 0x00, 0x40 }, // 64
+
+ new byte[] { (byte)'x', (byte)'y', (byte)'X', (byte)'L' },
+ new byte[] { 0x00, 0x00, 0x00, 0x0C }, // 12
+ new byte[] { 0x00, 0x00, 0x00, 0x40 }, // 64
IccTestDataPrimitives.Unicode_Rand2
);
@@ -669,8 +710,8 @@ namespace SixLabors.ImageSharp.Tests
(
new IccProfileSequenceIdentifier[]
{
- new IccProfileSequenceIdentifier(IccTestDataNonPrimitives.ProfileId_ValRand, LocalizedString_RandArr_enUs_deDE),
- new IccProfileSequenceIdentifier(IccTestDataNonPrimitives.ProfileId_ValRand, LocalizedString_RandArr_enUs_deDE),
+ new IccProfileSequenceIdentifier(IccTestDataNonPrimitives.ProfileId_ValRand, LocalizedString_RandArr_enUS_deDE),
+ new IccProfileSequenceIdentifier(IccTestDataNonPrimitives.ProfileId_ValRand, LocalizedString_RandArr_enUS_deDE),
}
);
public static readonly byte[] ProfileSequenceIdentifier_Arr = ArrayHelper.Concat
diff --git a/tests/ImageSharp.Tests/TestImages.cs b/tests/ImageSharp.Tests/TestImages.cs
index f6e493233d..c82688a1e4 100644
--- a/tests/ImageSharp.Tests/TestImages.cs
+++ b/tests/ImageSharp.Tests/TestImages.cs
@@ -129,7 +129,9 @@ namespace SixLabors.ImageSharp.Tests
public const string F = "Bmp/F.bmp";
public const string NegHeight = "Bmp/neg_height.bmp";
public const string CoreHeader = "Bmp/BitmapCoreHeaderQR.bmp";
- public static readonly string[] All = { Car, F, NegHeight, CoreHeader };
+ public const string V5Header = "Bmp/BITMAPV5HEADER.bmp";
+
+ public static readonly string[] All = { Car, F, NegHeight, CoreHeader, V5Header };
}
public static class Gif
diff --git a/tests/ImageSharp.Tests/TestImages/Formats/Bmp/BITMAPV5HEADER.bmp b/tests/ImageSharp.Tests/TestImages/Formats/Bmp/BITMAPV5HEADER.bmp
new file mode 100644
index 0000000000..1ab56bb007
--- /dev/null
+++ b/tests/ImageSharp.Tests/TestImages/Formats/Bmp/BITMAPV5HEADER.bmp
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:9d99f80a05e0ddb6309c84846dfac7d2ef4e9cdda6ed437646bc0edfee7d3130
+size 174026