diff --git a/src/ImageSharp/Processing/Extensions/Drawing/DrawImageExtensions.cs b/src/ImageSharp/Processing/Extensions/Drawing/DrawImageExtensions.cs
index 2cb8dc3211..eba107545d 100644
--- a/src/ImageSharp/Processing/Extensions/Drawing/DrawImageExtensions.cs
+++ b/src/ImageSharp/Processing/Extensions/Drawing/DrawImageExtensions.cs
@@ -23,14 +23,26 @@ public static class DrawImageExtensions
Image image,
float opacity)
{
- var options = source.GetGraphicsOptions();
- return source.ApplyProcessor(
- new DrawImageProcessor(
- image,
- Point.Empty,
- options.ColorBlendingMode,
- options.AlphaCompositionMode,
- opacity));
+ GraphicsOptions options = source.GetGraphicsOptions();
+ return DrawImage(source, image, options.ColorBlendingMode, options.AlphaCompositionMode, opacity);
+ }
+
+ ///
+ /// Draws the given image together with the current one by blending their pixels.
+ ///
+ /// The image this method extends.
+ /// The image to blend with the currently processing image.
+ /// The structure that specifies the portion of the image to draw.
+ /// The opacity of the image to blend. Must be between 0 and 1.
+ /// The .
+ public static IImageProcessingContext DrawImage(
+ this IImageProcessingContext source,
+ Image image,
+ Rectangle rectangle,
+ float opacity)
+ {
+ GraphicsOptions options = source.GetGraphicsOptions();
+ return DrawImage(source, image, rectangle, options.ColorBlendingMode, options.AlphaCompositionMode, opacity);
}
///
@@ -45,14 +57,25 @@ public static class DrawImageExtensions
this IImageProcessingContext source,
Image image,
PixelColorBlendingMode colorBlending,
- float opacity) =>
- source.ApplyProcessor(
- new DrawImageProcessor(
- image,
- Point.Empty,
- colorBlending,
- source.GetGraphicsOptions().AlphaCompositionMode,
- opacity));
+ float opacity)
+ => DrawImage(source, image, Point.Empty, colorBlending, opacity);
+
+ ///
+ /// Draws the given image together with the current one by blending their pixels.
+ ///
+ /// The image this method extends.
+ /// The image to blend with the currently processing image.
+ /// The structure that specifies the portion of the image to draw.
+ /// The blending mode.
+ /// The opacity of the image to blend. Must be between 0 and 1.
+ /// The .
+ public static IImageProcessingContext DrawImage(
+ this IImageProcessingContext source,
+ Image image,
+ Rectangle rectangle,
+ PixelColorBlendingMode colorBlending,
+ float opacity)
+ => DrawImage(source, image, rectangle, colorBlending, source.GetGraphicsOptions().AlphaCompositionMode, opacity);
///
/// Draws the given image together with the current one by blending their pixels.
@@ -68,8 +91,27 @@ public static class DrawImageExtensions
Image image,
PixelColorBlendingMode colorBlending,
PixelAlphaCompositionMode alphaComposition,
- float opacity) =>
- source.ApplyProcessor(new DrawImageProcessor(image, Point.Empty, colorBlending, alphaComposition, opacity));
+ float opacity)
+ => DrawImage(source, image, Point.Empty, colorBlending, alphaComposition, opacity);
+
+ ///
+ /// Draws the given image together with the current one by blending their pixels.
+ ///
+ /// The image this method extends.
+ /// The image to blend with the currently processing image.
+ /// The structure that specifies the portion of the image to draw.
+ /// The color blending mode.
+ /// The alpha composition mode.
+ /// The opacity of the image to blend. Must be between 0 and 1.
+ /// The .
+ public static IImageProcessingContext DrawImage(
+ this IImageProcessingContext source,
+ Image image,
+ Rectangle rectangle,
+ PixelColorBlendingMode colorBlending,
+ PixelAlphaCompositionMode alphaComposition,
+ float opacity)
+ => DrawImage(source, image, Point.Empty, rectangle, colorBlending, alphaComposition, opacity);
///
/// Draws the given image together with the current one by blending their pixels.
@@ -81,14 +123,23 @@ public static class DrawImageExtensions
public static IImageProcessingContext DrawImage(
this IImageProcessingContext source,
Image image,
- GraphicsOptions options) =>
- source.ApplyProcessor(
- new DrawImageProcessor(
- image,
- Point.Empty,
- options.ColorBlendingMode,
- options.AlphaCompositionMode,
- options.BlendPercentage));
+ GraphicsOptions options)
+ => DrawImage(source, image, Point.Empty, options);
+
+ ///
+ /// Draws the given image together with the current one by blending their pixels.
+ ///
+ /// The image this method extends.
+ /// The image to blend with the currently processing image.
+ /// The structure that specifies the portion of the image to draw.
+ /// The options, including the blending type and blending amount.
+ /// The .
+ public static IImageProcessingContext DrawImage(
+ this IImageProcessingContext source,
+ Image image,
+ Rectangle rectangle,
+ GraphicsOptions options)
+ => DrawImage(source, image, Point.Empty, rectangle, options);
///
/// Draws the given image together with the current one by blending their pixels.
@@ -104,14 +155,28 @@ public static class DrawImageExtensions
Point location,
float opacity)
{
- var options = source.GetGraphicsOptions();
- return source.ApplyProcessor(
- new DrawImageProcessor(
- image,
- location,
- options.ColorBlendingMode,
- options.AlphaCompositionMode,
- opacity));
+ GraphicsOptions options = source.GetGraphicsOptions();
+ return DrawImage(source, image, location, options.ColorBlendingMode, options.AlphaCompositionMode, opacity);
+ }
+
+ ///
+ /// Draws the given image together with the current one by blending their pixels.
+ ///
+ /// The image this method extends.
+ /// The image to blend with the currently processing image.
+ /// The location to draw the blended image.
+ /// The structure that specifies the portion of the image to draw.
+ /// The opacity of the image to blend. Must be between 0 and 1.
+ /// The .
+ public static IImageProcessingContext DrawImage(
+ this IImageProcessingContext source,
+ Image image,
+ Point location,
+ Rectangle rectangle,
+ float opacity)
+ {
+ GraphicsOptions options = source.GetGraphicsOptions();
+ return DrawImage(source, image, location, rectangle, options.ColorBlendingMode, options.AlphaCompositionMode, opacity);
}
///
@@ -128,14 +193,59 @@ public static class DrawImageExtensions
Image image,
Point location,
PixelColorBlendingMode colorBlending,
- float opacity) =>
- source.ApplyProcessor(
- new DrawImageProcessor(
- image,
- location,
- colorBlending,
- source.GetGraphicsOptions().AlphaCompositionMode,
- opacity));
+ float opacity)
+ => DrawImage(source, image, location, colorBlending, source.GetGraphicsOptions().AlphaCompositionMode, opacity);
+
+ ///
+ /// Draws the given image together with the current one by blending their pixels.
+ ///
+ /// The image this method extends.
+ /// The image to blend with the currently processing image.
+ /// The location to draw the blended image.
+ /// The structure that specifies the portion of the image to draw.
+ /// The color blending to apply.
+ /// The opacity of the image to blend. Must be between 0 and 1.
+ /// The .
+ public static IImageProcessingContext DrawImage(
+ this IImageProcessingContext source,
+ Image image,
+ Point location,
+ Rectangle rectangle,
+ PixelColorBlendingMode colorBlending,
+ float opacity)
+ => DrawImage(source, image, location, rectangle, colorBlending, source.GetGraphicsOptions().AlphaCompositionMode, opacity);
+
+ ///
+ /// Draws the given image together with the current one by blending their pixels.
+ ///
+ /// The image this method extends.
+ /// The image to blend with the currently processing image.
+ /// The location to draw the blended image.
+ /// The options containing the blend mode and opacity.
+ /// The .
+ public static IImageProcessingContext DrawImage(
+ this IImageProcessingContext source,
+ Image image,
+ Point location,
+ GraphicsOptions options)
+ => DrawImage(source, image, location, options.ColorBlendingMode, options.AlphaCompositionMode, options.BlendPercentage);
+
+ ///
+ /// Draws the given image together with the current one by blending their pixels.
+ ///
+ /// The image this method extends.
+ /// The image to blend with the currently processing image.
+ /// The location to draw the blended image.
+ /// The structure that specifies the portion of the image to draw.
+ /// The options containing the blend mode and opacity.
+ /// The .
+ public static IImageProcessingContext DrawImage(
+ this IImageProcessingContext source,
+ Image image,
+ Point location,
+ Rectangle rectangle,
+ GraphicsOptions options)
+ => DrawImage(source, image, location, rectangle, options.ColorBlendingMode, options.AlphaCompositionMode, options.BlendPercentage);
///
/// Draws the given image together with the current one by blending their pixels.
@@ -153,8 +263,8 @@ public static class DrawImageExtensions
Point location,
PixelColorBlendingMode colorBlending,
PixelAlphaCompositionMode alphaComposition,
- float opacity) =>
- source.ApplyProcessor(new DrawImageProcessor(image, location, colorBlending, alphaComposition, opacity));
+ float opacity)
+ => source.ApplyProcessor(new DrawImageProcessor(image, location, colorBlending, alphaComposition, opacity));
///
/// Draws the given image together with the current one by blending their pixels.
@@ -162,18 +272,20 @@ public static class DrawImageExtensions
/// The image this method extends.
/// The image to blend with the currently processing image.
/// The location to draw the blended image.
- /// The options containing the blend mode and opacity.
+ /// The structure that specifies the portion of the image to draw.
+ /// The color blending to apply.
+ /// The alpha composition mode.
+ /// The opacity of the image to blend. Must be between 0 and 1.
/// The .
public static IImageProcessingContext DrawImage(
this IImageProcessingContext source,
Image image,
Point location,
- GraphicsOptions options) =>
+ Rectangle rectangle,
+ PixelColorBlendingMode colorBlending,
+ PixelAlphaCompositionMode alphaComposition,
+ float opacity) =>
source.ApplyProcessor(
- new DrawImageProcessor(
- image,
- location,
- options.ColorBlendingMode,
- options.AlphaCompositionMode,
- options.BlendPercentage));
+ new DrawImageProcessor(image, location, colorBlending, alphaComposition, opacity),
+ rectangle);
}
diff --git a/src/ImageSharp/Processing/Processors/Drawing/DrawImageProcessor.cs b/src/ImageSharp/Processing/Processors/Drawing/DrawImageProcessor.cs
index b7d5b42f8a..9de4f862b8 100644
--- a/src/ImageSharp/Processing/Processors/Drawing/DrawImageProcessor.cs
+++ b/src/ImageSharp/Processing/Processors/Drawing/DrawImageProcessor.cs
@@ -63,7 +63,7 @@ public class DrawImageProcessor : IImageProcessor
public IImageProcessor CreatePixelSpecificProcessor(Configuration configuration, Image source, Rectangle sourceRectangle)
where TPixelBg : unmanaged, IPixel
{
- var visitor = new ProcessorFactoryVisitor(configuration, this, source, sourceRectangle);
+ ProcessorFactoryVisitor visitor = new(configuration, this, source, sourceRectangle);
this.Image.AcceptVisitor(visitor);
return visitor.Result;
}
@@ -88,8 +88,7 @@ public class DrawImageProcessor : IImageProcessor
public void Visit(Image image)
where TPixelFg : unmanaged, IPixel
- {
- this.Result = new DrawImageProcessor(
+ => this.Result = new DrawImageProcessor(
this.configuration,
image,
this.source,
@@ -98,6 +97,5 @@ public class DrawImageProcessor : IImageProcessor
this.definition.ColorBlendingMode,
this.definition.AlphaCompositionMode,
this.definition.Opacity);
- }
}
}
diff --git a/src/ImageSharp/Processing/Processors/Drawing/DrawImageProcessor{TPixelBg,TPixelFg}.cs b/src/ImageSharp/Processing/Processors/Drawing/DrawImageProcessor{TPixelBg,TPixelFg}.cs
index 82e639f1bd..436a447972 100644
--- a/src/ImageSharp/Processing/Processors/Drawing/DrawImageProcessor{TPixelBg,TPixelFg}.cs
+++ b/src/ImageSharp/Processing/Processors/Drawing/DrawImageProcessor{TPixelBg,TPixelFg}.cs
@@ -89,7 +89,7 @@ internal class DrawImageProcessor : ImageProcessor
int width = maxX - minX;
- var workingRect = Rectangle.FromLTRB(minX, minY, maxX, maxY);
+ Rectangle workingRect = Rectangle.FromLTRB(minX, minY, maxX, maxY);
// Not a valid operation because rectangle does not overlap with this image.
if (workingRect.Width <= 0 || workingRect.Height <= 0)
@@ -98,7 +98,7 @@ internal class DrawImageProcessor : ImageProcessor
"Cannot draw image because the source image does not overlap the target image.");
}
- var operation = new RowOperation(source.PixelBuffer, targetImage.Frames.RootFrame.PixelBuffer, blender, configuration, minX, width, locationY, targetX, this.Opacity);
+ DrawImageProcessor.RowOperation operation = new(source.PixelBuffer, targetImage.Frames.RootFrame.PixelBuffer, blender, configuration, minX, width, locationY, targetX, this.Opacity);
ParallelRowIterator.IterateRows(
configuration,
workingRect,