diff --git a/src/ImageSharp/Common/Helpers/Guard.cs b/src/ImageSharp/Common/Helpers/Guard.cs
index 95211ccda8..a485bf9b36 100644
--- a/src/ImageSharp/Common/Helpers/Guard.cs
+++ b/src/ImageSharp/Common/Helpers/Guard.cs
@@ -1,9 +1,9 @@
// Copyright (c) Six Labors.
// Licensed under the Six Labors Split License.
-#nullable disable
using System.Runtime.CompilerServices;
using SixLabors.ImageSharp;
+using SixLabors.ImageSharp.Processing.Processors.Transforms;
namespace SixLabors;
@@ -17,13 +17,14 @@ internal static partial class Guard
/// The type of the value.
/// is not a value type.
[MethodImpl(InliningOptions.ShortMethod)]
- public static void MustBeValueType(TValue value, string parameterName)
+ public static void SamplerMustBeValueType(TValue value, [CallerArgumentExpression("value")] string? parameterName = null)
+ where TValue : IResampler
{
if (value.GetType().IsValueType)
{
return;
}
- ThrowHelper.ThrowArgumentException("Type must be a struct.", parameterName);
+ ThrowHelper.ThrowArgumentException("Type must be a struct.", parameterName!);
}
}
diff --git a/src/ImageSharp/ImageExtensions.cs b/src/ImageSharp/ImageExtensions.cs
index 04930a2689..cf970b3166 100644
--- a/src/ImageSharp/ImageExtensions.cs
+++ b/src/ImageSharp/ImageExtensions.cs
@@ -1,6 +1,5 @@
// Copyright (c) Six Labors.
// Licensed under the Six Labors Split License.
-#nullable disable
using System.Globalization;
using System.Text;
@@ -180,6 +179,6 @@ public static partial class ImageExtensions
// Always available.
stream.TryGetBuffer(out ArraySegment buffer);
- return $"data:{format.DefaultMimeType};base64,{Convert.ToBase64String(buffer.Array, 0, (int)stream.Length)}";
+ return $"data:{format.DefaultMimeType};base64,{Convert.ToBase64String(buffer.Array ?? Array.Empty(), 0, (int)stream.Length)}";
}
}
diff --git a/src/ImageSharp/ImageFrame{TPixel}.cs b/src/ImageSharp/ImageFrame{TPixel}.cs
index fb4ee6ae5f..becd69a0eb 100644
--- a/src/ImageSharp/ImageFrame{TPixel}.cs
+++ b/src/ImageSharp/ImageFrame{TPixel}.cs
@@ -1,6 +1,5 @@
// Copyright (c) Six Labors.
// Licensed under the Six Labors Split License.
-#nullable disable
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
@@ -183,7 +182,7 @@ public sealed class ImageFrame : ImageFrame, IPixelSource
try
{
- var accessor = new PixelAccessor(this.PixelBuffer);
+ PixelAccessor accessor = new(this.PixelBuffer);
processPixels(accessor);
}
finally
@@ -211,8 +210,8 @@ public sealed class ImageFrame : ImageFrame, IPixelSource
try
{
- var accessor1 = new PixelAccessor(this.PixelBuffer);
- var accessor2 = new PixelAccessor(frame2.PixelBuffer);
+ PixelAccessor accessor1 = new(this.PixelBuffer);
+ PixelAccessor accessor2 = new(frame2.PixelBuffer);
processPixels(accessor1, accessor2);
}
finally
@@ -247,9 +246,9 @@ public sealed class ImageFrame : ImageFrame, IPixelSource
try
{
- var accessor1 = new PixelAccessor(this.PixelBuffer);
- var accessor2 = new PixelAccessor(frame2.PixelBuffer);
- var accessor3 = new PixelAccessor(frame3.PixelBuffer);
+ PixelAccessor accessor1 = new(this.PixelBuffer);
+ PixelAccessor accessor2 = new(frame2.PixelBuffer);
+ PixelAccessor accessor3 = new(frame3.PixelBuffer);
processPixels(accessor1, accessor2, accessor3);
}
finally
@@ -342,8 +341,7 @@ public sealed class ImageFrame : ImageFrame, IPixelSource
if (disposing)
{
- this.PixelBuffer?.Dispose();
- this.PixelBuffer = null;
+ this.PixelBuffer.Dispose();
}
this.isDisposed = true;
@@ -379,14 +377,14 @@ public sealed class ImageFrame : ImageFrame, IPixelSource
///
/// The configuration providing initialization code which allows extending the library.
/// The
- internal ImageFrame Clone(Configuration configuration) => new ImageFrame(configuration, this);
+ internal ImageFrame Clone(Configuration configuration) => new(configuration, this);
///
/// Returns a copy of the image frame in the given pixel format.
///
/// The pixel format.
/// The
- internal ImageFrame CloneAs()
+ internal ImageFrame? CloneAs()
where TPixel2 : unmanaged, IPixel => this.CloneAs(this.GetConfiguration());
///
@@ -400,11 +398,11 @@ public sealed class ImageFrame : ImageFrame, IPixelSource
{
if (typeof(TPixel2) == typeof(TPixel))
{
- return this.Clone(configuration) as ImageFrame;
+ return (this.Clone(configuration) as ImageFrame)!;
}
- var target = new ImageFrame(configuration, this.Width, this.Height, this.Metadata.DeepClone());
- var operation = new RowIntervalOperation(this.PixelBuffer, target.PixelBuffer, configuration);
+ ImageFrame target = new(configuration, this.Width, this.Height, this.Metadata.DeepClone());
+ RowIntervalOperation operation = new(this.PixelBuffer, target.PixelBuffer, configuration);
ParallelRowIterator.IterateRowIntervals(
configuration,
diff --git a/src/ImageSharp/IndexedImageFrame{TPixel}.cs b/src/ImageSharp/IndexedImageFrame{TPixel}.cs
index 741b3219e0..12a78a0239 100644
--- a/src/ImageSharp/IndexedImageFrame{TPixel}.cs
+++ b/src/ImageSharp/IndexedImageFrame{TPixel}.cs
@@ -1,6 +1,5 @@
// Copyright (c) Six Labors.
// Licensed under the Six Labors Split License.
-#nullable disable
using System.Buffers;
using System.Runtime.CompilerServices;
@@ -109,8 +108,6 @@ public sealed class IndexedImageFrame : IPixelSource, IDisposable
this.isDisposed = true;
this.pixelBuffer.Dispose();
this.paletteOwner.Dispose();
- this.pixelBuffer = null;
- this.paletteOwner = null;
}
}
}
diff --git a/src/ImageSharp/Processing/Extensions/ProcessingExtensions.cs b/src/ImageSharp/Processing/Extensions/ProcessingExtensions.cs
index 575ce293ca..02e688f57f 100644
--- a/src/ImageSharp/Processing/Extensions/ProcessingExtensions.cs
+++ b/src/ImageSharp/Processing/Extensions/ProcessingExtensions.cs
@@ -1,6 +1,5 @@
// Copyright (c) Six Labors.
// Licensed under the Six Labors Split License.
-#nullable disable
using SixLabors.ImageSharp.Advanced;
using SixLabors.ImageSharp.PixelFormats;
@@ -135,7 +134,7 @@ public static partial class ProcessingExtensions
/// The operation is null.
/// The source has been disposed.
/// The processing operation failed.
- public static Image Clone(this Image source, Action operation)
+ public static Image? Clone(this Image source, Action operation)
=> Clone(source, source.GetConfiguration(), operation);
///
@@ -150,14 +149,14 @@ public static partial class ProcessingExtensions
/// The source has been disposed.
/// The processing operation failed.
/// The new .
- public static Image Clone(this Image source, Configuration configuration, Action operation)
+ public static Image? Clone(this Image source, Configuration configuration, Action operation)
{
Guard.NotNull(configuration, nameof(configuration));
Guard.NotNull(source, nameof(source));
Guard.NotNull(operation, nameof(operation));
source.EnsureNotDisposed();
- var visitor = new ProcessingVisitor(configuration, operation, false);
+ ProcessingVisitor visitor = new(configuration, operation, false);
source.AcceptVisitor(visitor);
return visitor.ResultImage;
}
@@ -282,7 +281,7 @@ public static partial class ProcessingExtensions
this.mutate = mutate;
}
- public Image ResultImage { get; private set; }
+ public Image? ResultImage { get; private set; }
public void Visit(Image image)
where TPixel : unmanaged, IPixel
diff --git a/src/ImageSharp/Processing/Processors/Transforms/Linear/AffineTransformProcessor.cs b/src/ImageSharp/Processing/Processors/Transforms/Linear/AffineTransformProcessor.cs
index abb8beccdf..4a13e69174 100644
--- a/src/ImageSharp/Processing/Processors/Transforms/Linear/AffineTransformProcessor.cs
+++ b/src/ImageSharp/Processing/Processors/Transforms/Linear/AffineTransformProcessor.cs
@@ -19,7 +19,7 @@ public class AffineTransformProcessor : CloningImageProcessor
public AffineTransformProcessor(Matrix3x2 matrix, IResampler sampler, Size targetDimensions)
{
Guard.NotNull(sampler, nameof(sampler));
- Guard.MustBeValueType(sampler, nameof(sampler));
+ Guard.SamplerMustBeValueType(sampler);
if (TransformUtils.IsDegenerate(matrix))
{
diff --git a/src/ImageSharp/Processing/Processors/Transforms/Linear/ProjectiveTransformProcessor.cs b/src/ImageSharp/Processing/Processors/Transforms/Linear/ProjectiveTransformProcessor.cs
index 9b0b979e69..55e3227fb7 100644
--- a/src/ImageSharp/Processing/Processors/Transforms/Linear/ProjectiveTransformProcessor.cs
+++ b/src/ImageSharp/Processing/Processors/Transforms/Linear/ProjectiveTransformProcessor.cs
@@ -19,7 +19,7 @@ public sealed class ProjectiveTransformProcessor : CloningImageProcessor
public ProjectiveTransformProcessor(Matrix4x4 matrix, IResampler sampler, Size targetDimensions)
{
Guard.NotNull(sampler, nameof(sampler));
- Guard.MustBeValueType(sampler, nameof(sampler));
+ Guard.SamplerMustBeValueType(sampler);
if (TransformUtils.IsDegenerate(matrix))
{
diff --git a/src/ImageSharp/Processing/Processors/Transforms/Resize/ResizeProcessor.cs b/src/ImageSharp/Processing/Processors/Transforms/Resize/ResizeProcessor.cs
index b7651c03f3..f056e434ed 100644
--- a/src/ImageSharp/Processing/Processors/Transforms/Resize/ResizeProcessor.cs
+++ b/src/ImageSharp/Processing/Processors/Transforms/Resize/ResizeProcessor.cs
@@ -17,7 +17,7 @@ public class ResizeProcessor : CloningImageProcessor
{
Guard.NotNull(options, nameof(options));
Guard.NotNull(options.Sampler, nameof(options.Sampler));
- Guard.MustBeValueType(options.Sampler, nameof(options.Sampler));
+ Guard.SamplerMustBeValueType(options.Sampler);
(Size size, Rectangle rectangle) = ResizeHelper.CalculateTargetLocationAndBounds(sourceSize, options);