diff --git a/src/ImageSharp/Common/Exceptions/InvalidImageContentException.cs b/src/ImageSharp/Common/Exceptions/InvalidImageContentException.cs
index 7069e8982..8be13919f 100644
--- a/src/ImageSharp/Common/Exceptions/InvalidImageContentException.cs
+++ b/src/ImageSharp/Common/Exceptions/InvalidImageContentException.cs
@@ -1,6 +1,8 @@
// Copyright (c) Six Labors and contributors.
// Licensed under the Apache License, Version 2.0.
+using System;
+
namespace SixLabors.ImageSharp
{
///
@@ -18,5 +20,17 @@ namespace SixLabors.ImageSharp
: base(errorMessage)
{
}
+
+ ///
+ /// Initializes a new instance of the class with the name of the
+ /// parameter that causes this exception.
+ ///
+ /// The error message that explains the reason for this exception.
+ /// The exception that is the cause of the current exception, or a null reference (Nothing in Visual Basic)
+ /// if no inner exception is specified.
+ public InvalidImageContentException(string errorMessage, Exception innerException)
+ : base(errorMessage, innerException)
+ {
+ }
}
}
diff --git a/src/ImageSharp/Formats/Bmp/BmpDecoder.cs b/src/ImageSharp/Formats/Bmp/BmpDecoder.cs
index a956f19c7..cafe10106 100644
--- a/src/ImageSharp/Formats/Bmp/BmpDecoder.cs
+++ b/src/ImageSharp/Formats/Bmp/BmpDecoder.cs
@@ -43,9 +43,7 @@ namespace SixLabors.ImageSharp.Formats.Bmp
{
Size dims = decoder.Dimensions;
- // TODO: use InvalidImageContentException here, if we decide to define it
- // https://github.com/SixLabors/ImageSharp/issues/1110
- throw new ImageFormatException($"Can not decode image. Failed to allocate buffers for possibly degenerate dimensions: {dims.Width}x{dims.Height}. This error can happen for very large RLE bitmaps, which are not supported.", ex);
+ throw new InvalidImageContentException($"Can not decode image. Failed to allocate buffers for possibly degenerate dimensions: {dims.Width}x{dims.Height}. This error can happen for very large RLE bitmaps, which are not supported.", ex);
}
}
diff --git a/src/ImageSharp/Formats/Gif/GifDecoder.cs b/src/ImageSharp/Formats/Gif/GifDecoder.cs
index caa076553..553163bd7 100644
--- a/src/ImageSharp/Formats/Gif/GifDecoder.cs
+++ b/src/ImageSharp/Formats/Gif/GifDecoder.cs
@@ -38,9 +38,10 @@ namespace SixLabors.ImageSharp.Formats.Gif
{
Size dims = decoder.Dimensions;
- // TODO: use InvalidImageContentException here, if we decide to define it
- // https://github.com/SixLabors/ImageSharp/issues/1110
- throw new ImageFormatException($"Can not decode image. Failed to allocate buffers for possibly degenerate dimensions: {dims.Width}x{dims.Height}.", ex);
+ GifThrowHelper.ThrowInvalidImageContentException($"Can not decode image. Failed to allocate buffers for possibly degenerate dimensions: {dims.Width}x{dims.Height}.", ex);
+
+ // Not reachable, as the previous statement will throw a exception.
+ return null;
}
}
diff --git a/src/ImageSharp/Formats/Gif/GifThrowHelper.cs b/src/ImageSharp/Formats/Gif/GifThrowHelper.cs
index 1d81008a0..1b20c9f64 100644
--- a/src/ImageSharp/Formats/Gif/GifThrowHelper.cs
+++ b/src/ImageSharp/Formats/Gif/GifThrowHelper.cs
@@ -1,6 +1,7 @@
// Copyright (c) Six Labors and contributors.
// Licensed under the Apache License, Version 2.0.
+using System;
using System.Runtime.CompilerServices;
namespace SixLabors.ImageSharp.Formats.Gif
@@ -11,8 +12,17 @@ namespace SixLabors.ImageSharp.Formats.Gif
/// Cold path optimization for throwing 's
///
/// The error message for the exception.
- [MethodImpl(MethodImplOptions.NoInlining)]
+ [MethodImpl(InliningOptions.ColdPath)]
public static void ThrowInvalidImageContentException(string errorMessage)
=> throw new InvalidImageContentException(errorMessage);
+
+ ///
+ /// Cold path optimization for throwing 's.
+ ///
+ /// The error message for the exception.
+ /// The exception that is the cause of the current exception, or a null reference
+ /// if no inner exception is specified.
+ [MethodImpl(InliningOptions.ColdPath)]
+ public static void ThrowInvalidImageContentException(string errorMessage, Exception innerException) => throw new InvalidImageContentException(errorMessage, innerException);
}
}
diff --git a/src/ImageSharp/Formats/Jpeg/JpegDecoder.cs b/src/ImageSharp/Formats/Jpeg/JpegDecoder.cs
index b1144508e..e60901d91 100644
--- a/src/ImageSharp/Formats/Jpeg/JpegDecoder.cs
+++ b/src/ImageSharp/Formats/Jpeg/JpegDecoder.cs
@@ -32,9 +32,10 @@ namespace SixLabors.ImageSharp.Formats.Jpeg
{
(int w, int h) = (decoder.ImageWidth, decoder.ImageHeight);
- // TODO: use InvalidImageContentException here, if we decide to define it
- // https://github.com/SixLabors/ImageSharp/issues/1110
- throw new ImageFormatException($"Can not decode image. Failed to allocate buffers for possibly degenerate dimensions: {w}x{h}.", ex);
+ JpegThrowHelper.ThrowInvalidImageContentException($"Can not decode image. Failed to allocate buffers for possibly degenerate dimensions: {w}x{h}.", ex);
+
+ // Not reachable, as the previous statement will throw a exception.
+ return null;
}
}
diff --git a/src/ImageSharp/Formats/Jpeg/JpegThrowHelper.cs b/src/ImageSharp/Formats/Jpeg/JpegThrowHelper.cs
index dd44cb2d1..da4c3f9ee 100644
--- a/src/ImageSharp/Formats/Jpeg/JpegThrowHelper.cs
+++ b/src/ImageSharp/Formats/Jpeg/JpegThrowHelper.cs
@@ -15,6 +15,15 @@ namespace SixLabors.ImageSharp.Formats.Jpeg
[MethodImpl(InliningOptions.ColdPath)]
public static void ThrowInvalidImageContentException(string errorMessage) => throw new InvalidImageContentException(errorMessage);
+ ///
+ /// Cold path optimization for throwing 's.
+ ///
+ /// The error message for the exception.
+ /// The exception that is the cause of the current exception, or a null reference
+ /// if no inner exception is specified.
+ [MethodImpl(InliningOptions.ColdPath)]
+ public static void ThrowInvalidImageContentException(string errorMessage, Exception innerException) => throw new InvalidImageContentException(errorMessage, innerException);
+
///
/// Cold path optimization for throwing 's
///
diff --git a/src/ImageSharp/Formats/Png/PngDecoder.cs b/src/ImageSharp/Formats/Png/PngDecoder.cs
index d605577e7..eceb4e592 100644
--- a/src/ImageSharp/Formats/Png/PngDecoder.cs
+++ b/src/ImageSharp/Formats/Png/PngDecoder.cs
@@ -54,9 +54,10 @@ namespace SixLabors.ImageSharp.Formats.Png
{
Size dims = decoder.Dimensions;
- // TODO: use InvalidImageContentException here, if we decide to define it
- // https://github.com/SixLabors/ImageSharp/issues/1110
- throw new ImageFormatException($"Can not decode image. Failed to allocate buffers for possibly degenerate dimensions: {dims.Width}x{dims.Height}.", ex);
+ PngThrowHelper.ThrowInvalidImageContentException($"Can not decode image. Failed to allocate buffers for possibly degenerate dimensions: {dims.Width}x{dims.Height}.", ex);
+
+ // Not reachable, as the previous statement will throw a exception.
+ return null;
}
}
diff --git a/src/ImageSharp/Formats/Png/PngMetadata.cs b/src/ImageSharp/Formats/Png/PngMetadata.cs
index 341fc53ed..1e4567548 100644
--- a/src/ImageSharp/Formats/Png/PngMetadata.cs
+++ b/src/ImageSharp/Formats/Png/PngMetadata.cs
@@ -91,34 +91,12 @@ namespace SixLabors.ImageSharp.Formats.Png
public bool HasTransparency { get; set; }
///
- /// Gets or sets the collection of text data stored within the iTXt, tEXt, and zTXt chunks.
+ /// Gets or sets the collection of text data stored within the iTXt, tEXt, and zTXt chunks.
/// Used for conveying textual information associated with the image.
///
public IList TextData { get; set; } = new List();
- ///
- /// Gets the list of png text properties for storing meta information about this image.
- ///
- public IList PngTextProperties { get; } = new List();
-
///
public IDeepCloneable DeepClone() => new PngMetadata(this);
-
- internal bool TryGetPngTextProperty(string keyword, out PngTextData result)
- {
- for (int i = 0; i < this.TextData.Count; i++)
- {
- if (this.TextData[i].Keyword == keyword)
- {
- result = this.TextData[i];
-
- return true;
- }
- }
-
- result = default;
-
- return false;
- }
}
}
diff --git a/src/ImageSharp/Formats/Png/PngThrowHelper.cs b/src/ImageSharp/Formats/Png/PngThrowHelper.cs
index b0a2571ea..a72a4a0d8 100644
--- a/src/ImageSharp/Formats/Png/PngThrowHelper.cs
+++ b/src/ImageSharp/Formats/Png/PngThrowHelper.cs
@@ -11,6 +11,10 @@ namespace SixLabors.ImageSharp.Formats.Png
///
internal static class PngThrowHelper
{
+ [MethodImpl(InliningOptions.ColdPath)]
+ public static void ThrowInvalidImageContentException(string errorMessage, Exception innerException)
+ => throw new InvalidImageContentException(errorMessage, innerException);
+
[MethodImpl(InliningOptions.ColdPath)]
public static void ThrowNoHeader() => throw new InvalidImageContentException("PNG Image does not contain a header chunk");
diff --git a/src/ImageSharp/Formats/Tga/TgaDecoder.cs b/src/ImageSharp/Formats/Tga/TgaDecoder.cs
index c3b8526ce..64dbdf58a 100644
--- a/src/ImageSharp/Formats/Tga/TgaDecoder.cs
+++ b/src/ImageSharp/Formats/Tga/TgaDecoder.cs
@@ -28,9 +28,10 @@ namespace SixLabors.ImageSharp.Formats.Tga
{
Size dims = decoder.Dimensions;
- // TODO: use InvalidImageContentException here, if we decide to define it
- // https://github.com/SixLabors/ImageSharp/issues/1110
- throw new ImageFormatException($"Can not decode image. Failed to allocate buffers for possibly degenerate dimensions: {dims.Width}x{dims.Height}.", ex);
+ TgaThrowHelper.ThrowInvalidImageContentException($"Can not decode image. Failed to allocate buffers for possibly degenerate dimensions: {dims.Width}x{dims.Height}.", ex);
+
+ // Not reachable, as the previous statement will throw a exception.
+ return null;
}
}
diff --git a/src/ImageSharp/Formats/Tga/TgaThrowHelper.cs b/src/ImageSharp/Formats/Tga/TgaThrowHelper.cs
index 1714a2025..fc158e781 100644
--- a/src/ImageSharp/Formats/Tga/TgaThrowHelper.cs
+++ b/src/ImageSharp/Formats/Tga/TgaThrowHelper.cs
@@ -12,15 +12,25 @@ namespace SixLabors.ImageSharp.Formats.Tga
/// Cold path optimization for throwing 's
///
/// The error message for the exception.
- [MethodImpl(MethodImplOptions.NoInlining)]
+ [MethodImpl(InliningOptions.ColdPath)]
public static void ThrowInvalidImageContentException(string errorMessage)
=> throw new InvalidImageContentException(errorMessage);
+ ///
+ /// Cold path optimization for throwing 's
+ ///
+ /// The error message for the exception.
+ /// The exception that is the cause of the current exception, or a null reference
+ /// if no inner exception is specified.
+ [MethodImpl(InliningOptions.ColdPath)]
+ public static void ThrowInvalidImageContentException(string errorMessage, Exception innerException)
+ => throw new InvalidImageContentException(errorMessage, innerException);
+
///
/// Cold path optimization for throwing 's
///
/// The error message for the exception.
- [MethodImpl(MethodImplOptions.NoInlining)]
+ [MethodImpl(InliningOptions.ColdPath)]
public static void ThrowNotSupportedException(string errorMessage)
=> throw new NotSupportedException(errorMessage);
}
diff --git a/tests/ImageSharp.Tests/Formats/Bmp/BmpDecoderTests.cs b/tests/ImageSharp.Tests/Formats/Bmp/BmpDecoderTests.cs
index 85cdf6d11..f63fc0a16 100644
--- a/tests/ImageSharp.Tests/Formats/Bmp/BmpDecoderTests.cs
+++ b/tests/ImageSharp.Tests/Formats/Bmp/BmpDecoderTests.cs
@@ -77,7 +77,7 @@ namespace SixLabors.ImageSharp.Tests.Formats.Bmp
where TPixel : unmanaged, IPixel
{
provider.LimitAllocatorBufferCapacity().InPixelsSqrt(10);
- ImageFormatException ex = Assert.Throws(() => provider.GetImage(BmpDecoder));
+ InvalidImageContentException ex = Assert.Throws(() => provider.GetImage(BmpDecoder));
Assert.IsType(ex.InnerException);
}
diff --git a/tests/ImageSharp.Tests/Formats/Gif/GifDecoderTests.cs b/tests/ImageSharp.Tests/Formats/Gif/GifDecoderTests.cs
index 199c6c0b2..12d890357 100644
--- a/tests/ImageSharp.Tests/Formats/Gif/GifDecoderTests.cs
+++ b/tests/ImageSharp.Tests/Formats/Gif/GifDecoderTests.cs
@@ -191,7 +191,7 @@ namespace SixLabors.ImageSharp.Tests.Formats.Gif
where TPixel : unmanaged, IPixel
{
provider.LimitAllocatorBufferCapacity().InPixelsSqrt(10);
- ImageFormatException ex = Assert.Throws(() => provider.GetImage(GifDecoder));
+ InvalidImageContentException ex = Assert.Throws(() => provider.GetImage(GifDecoder));
Assert.IsType(ex.InnerException);
}
diff --git a/tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderTests.cs b/tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderTests.cs
index 25cf5dd37..a35bb177c 100644
--- a/tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderTests.cs
+++ b/tests/ImageSharp.Tests/Formats/Jpg/JpegDecoderTests.cs
@@ -107,7 +107,7 @@ namespace SixLabors.ImageSharp.Tests.Formats.Jpg
where TPixel : unmanaged, IPixel
{
provider.LimitAllocatorBufferCapacity().InBytesSqrt(10);
- ImageFormatException ex = Assert.Throws(() => provider.GetImage(JpegDecoder));
+ InvalidImageContentException ex = Assert.Throws(() => provider.GetImage(JpegDecoder));
this.Output.WriteLine(ex.Message);
Assert.IsType(ex.InnerException);
}
diff --git a/tests/ImageSharp.Tests/Formats/Png/PngDecoderTests.cs b/tests/ImageSharp.Tests/Formats/Png/PngDecoderTests.cs
index 6eb6e93db..72b27ec5d 100644
--- a/tests/ImageSharp.Tests/Formats/Png/PngDecoderTests.cs
+++ b/tests/ImageSharp.Tests/Formats/Png/PngDecoderTests.cs
@@ -397,7 +397,7 @@ namespace SixLabors.ImageSharp.Tests.Formats.Png
where TPixel : unmanaged, IPixel
{
provider.LimitAllocatorBufferCapacity().InPixelsSqrt(10);
- ImageFormatException ex = Assert.Throws(() => provider.GetImage(PngDecoder));
+ InvalidImageContentException ex = Assert.Throws(() => provider.GetImage(PngDecoder));
Assert.IsType(ex.InnerException);
}
diff --git a/tests/ImageSharp.Tests/Formats/Tga/TgaDecoderTests.cs b/tests/ImageSharp.Tests/Formats/Tga/TgaDecoderTests.cs
index 840bb55f2..6f886b73d 100644
--- a/tests/ImageSharp.Tests/Formats/Tga/TgaDecoderTests.cs
+++ b/tests/ImageSharp.Tests/Formats/Tga/TgaDecoderTests.cs
@@ -740,7 +740,7 @@ namespace SixLabors.ImageSharp.Tests.Formats.Tga
where TPixel : unmanaged, IPixel
{
provider.LimitAllocatorBufferCapacity().InPixelsSqrt(10);
- ImageFormatException ex = Assert.Throws(() => provider.GetImage(TgaDecoder));
+ InvalidImageContentException ex = Assert.Throws(() => provider.GetImage(TgaDecoder));
Assert.IsType(ex.InnerException);
}