protected override void ApplyTextWatermark(ImageProcessingActionExecuteArgs args, Graphics g)
    {
        // Draw a filled rectangle
        int rectangleWidth = 14;
        using (Brush brush = new SolidBrush(Color.FromArgb(220, Color.Red)))
        {
            g.FillRectangle(brush, new Rectangle(args.Image.Size.Width - rectangleWidth, 0, rectangleWidth, args.Image.Size.Height));
        }

        using (System.Drawing.Drawing2D.Matrix transform = g.Transform)
        {
            using (StringFormat stringFormat = new StringFormat())
            {
                // Vertical text (bottom -> top)
                stringFormat.FormatFlags = StringFormatFlags.DirectionVertical;
                transform.RotateAt(180F, new PointF(args.Image.Size.Width / 2, args.Image.Size.Height / 2));
                g.Transform = transform;

                // Align: top left, +2px displacement 
                // (because of the matrix transformation we have to use inverted values)
                base.ContentAlignment = ContentAlignment.MiddleLeft;
                base.ContentDisplacement = new Point(-2, -2);

                base.ForeColor = Color.White;
                base.Font.Size = 10;

                // Draw the string by invoking the base Apply method
                base.StringFormat = stringFormat;
                base.ApplyTextWatermark(args, g);
                base.StringFormat = null;
            }
        }
    }
    protected override void ApplyTextWatermark(ImageProcessingActionExecuteArgs args, Graphics g)
    {
        // Draw a filled rectangle
        int rectangleWidth = 14;

        using (Brush brush = new SolidBrush(Color.FromArgb(220, Color.Red)))
        {
            g.FillRectangle(brush, new Rectangle(args.Image.Size.Width - rectangleWidth, 0, rectangleWidth, args.Image.Size.Height));
        }

        using (System.Drawing.Drawing2D.Matrix transform = g.Transform)
        {
            using (StringFormat stringFormat = new StringFormat())
            {
                // Vertical text (bottom -> top)
                stringFormat.FormatFlags = StringFormatFlags.DirectionVertical;
                transform.RotateAt(180F, new PointF(args.Image.Size.Width / 2, args.Image.Size.Height / 2));
                g.Transform = transform;

                // Align: top left, +2px displacement
                // (because of the matrix transformation we have to use inverted values)
                base.ContentAlignment    = ContentAlignment.MiddleLeft;
                base.ContentDisplacement = new Point(-2, -2);

                base.ForeColor = Color.White;
                base.Font.Size = 10;

                // Draw the string by invoking the base Apply method
                base.StringFormat = stringFormat;
                base.ApplyTextWatermark(args, g);
                base.StringFormat = null;
            }
        }
    }
    protected override void Apply(ImageProcessingActionExecuteArgs args)
    {
        float normalizedRotationAngle = this._RotationAngle % 360F;
        if (normalizedRotationAngle == 0F)
        {
            // No need to rotate the image
            return;
        }

        Bitmap result = null;
        try
        {
            // Intial calculations
            double t;
            double t1;
            double b1;
            double t2;
            double b2;
            this.CalculateValues(args.Image.Size, out t, out t1, out b1, out t2, out b2);

            // Calculate the new image size
            Size outputImageSize = this.GetOutputImageSize(t1, b1, t2, b2);
           
            // Create the result image
            result = new Bitmap(outputImageSize.Width, outputImageSize.Height, CodeCarvings.Piczard.CommonData.DefaultPixelFormat);

            // Set the right image resolution (DPI)
            ImageHelper.SetImageResolution(result, args.ImageProcessingJob.OutputResolution);

            using (Graphics g = Graphics.FromImage(result))
            {
                // Use the max quality
                ImageHelper.SetGraphicsMaxQuality(g);

                if ((args.IsLastAction) && (!args.AppliedImageBackColorValue.HasValue))
                {
                    // Optimization (not mandatory)
                    // This is the last filter action and the ImageBackColor has not been yet applied...
                    // Apply the ImageBackColor now to save RAM & CPU
                    args.ApplyImageBackColor(g);
                }

                // Calculate the points for the DrawImage method
                Point[] shapePoints = new Point[3];

                if ((t >= 0D) && (t < (Math.PI / 2D)))
                {
                    shapePoints[0] = new Point(Convert.ToInt32(Math.Round(b2)), 0);
                    shapePoints[1] = new Point(outputImageSize.Width, Convert.ToInt32(Math.Round(t2)));
                    shapePoints[2] = new Point(0, Convert.ToInt32(Math.Round(b1)));
                }
                else if ((t >= (Math.PI / 2D)) && (t < Math.PI))
                {
                    shapePoints[0] = new Point(outputImageSize.Width, Convert.ToInt32(Math.Round(t2)));
                    shapePoints[1] = new Point(Convert.ToInt32(Math.Round(t1)), outputImageSize.Height);
                    shapePoints[2] = new Point(Convert.ToInt32(Math.Round(b2)), 0);
                }
                else if ((t >= Math.PI) && (t < (Math.PI + (Math.PI / 2D))))
                {
                    shapePoints[0] = new Point(Convert.ToInt32(Math.Round(t1)), outputImageSize.Height);
                    shapePoints[1] = new Point(0, Convert.ToInt32(Math.Round(b1)));
                    shapePoints[2] = new Point(outputImageSize.Width, Convert.ToInt32(Math.Round(t2)));
                }
                else
                {
                    shapePoints[0] = new Point(0, Convert.ToInt32(Math.Round(b1)));
                    shapePoints[1] = new Point(Convert.ToInt32(Math.Round(b2)), 0);
                    shapePoints[2] = new Point(Convert.ToInt32(Math.Round(t1)), outputImageSize.Height);
                }

                // Draw the image
                g.DrawImage(args.Image, shapePoints);
            }

            // Return the image
            args.Image = result;
        }
        catch
        {
            // An error has occurred...

            // Release the resources
            if (result != null)
            {
                result.Dispose();
                result = null;
            }

            // Re-throw the exception
            throw;
        }
    }
 protected override void Apply(ImageProcessingActionExecuteArgs args)
 {
     // This is only a container for multiple filters
     throw new Exception("Cannot invoke the Apply method.");
 }
    protected override void Apply(ImageProcessingActionExecuteArgs args)
    {
        Bitmap result = null;
        try
        {
            // Create the result image
            result = new Bitmap(350, 350, CodeCarvings.Piczard.CommonData.DefaultPixelFormat);

            // Set the right image resolution (DPI)
            ImageHelper.SetImageResolution(result, args.ImageProcessingJob.OutputResolution);

            using (Graphics g = Graphics.FromImage(result))
            {
                // Use the max quality
                ImageHelper.SetGraphicsMaxQuality(g);

                if ((args.IsLastAction) && (!args.AppliedImageBackColorValue.HasValue))
                {
                    // Optimization (not mandatory)
                    // This is the last filter action and the ImageBackColor has not been yet applied...
                    // Apply the ImageBackColor now to save RAM & CPU
                    args.ApplyImageBackColor(g);
                }

                using (ImageAttributes imageAttributes = new ImageAttributes())
                {
                    // Important
                    imageAttributes.SetWrapMode(WrapMode.TileFlipXY);

                    // Draw the scaled image
                    Rectangle destinationRectangle = new Rectangle(75, 52, 200, 200);
                    using (Image resizedImage = new FixedCropConstraint(GfxUnit.Pixel, destinationRectangle.Size).GetProcessedImage(args.Image))
                    {
                        g.DrawImage(resizedImage, destinationRectangle, 0, 0, resizedImage.Width, resizedImage.Height, GraphicsUnit.Pixel, imageAttributes);

                        // Draw the reflection
                        destinationRectangle = new Rectangle(75, 252, 200, 98);
                        using (Image flippedImage = ImageTransformation.FlipVertical.GetProcessedImage(resizedImage))
                        {
                            g.DrawImage(flippedImage, destinationRectangle, 0, 0, flippedImage.Width, flippedImage.Height, GraphicsUnit.Pixel, imageAttributes);
                        }
                    }

                    // Draw the mask
                    destinationRectangle = new Rectangle(0, 0, result.Width, result.Height);
                    using (LoadedImage loadedImage = ImageArchiver.LoadImage("~/repository/filters/MyCustomFilter1Mask.png"))
                    {
                        g.DrawImage(loadedImage.Image, destinationRectangle, 0, 0, loadedImage.Size.Width, loadedImage.Size.Height, GraphicsUnit.Pixel, imageAttributes);
                    }
                }

                // Draw the text
                string text = "Generated by 'MyCustomFilter1' on " + DateTime.Now.ToString();
                FontDefinition fontDefinition = new FontDefinition();
                fontDefinition.Size = 12; //12px
                using (Font font = fontDefinition.GetFont())
                {
                    // Setup the custom parameters
                    g.TextRenderingHint = TextRenderingHint.AntiAliasGridFit;

                    using (StringFormat stringFormat = new StringFormat())
                    {
                        SizeF textSize = g.MeasureString(text, font, int.MaxValue, stringFormat);
                        Size pixelTextSize = new Size(Convert.ToInt32(Math.Round(textSize.Width)), Convert.ToInt32(Math.Round(textSize.Height)));

                        // Calculate the text position
                        Point location = new Point((result.Width - pixelTextSize.Width) / 2, result.Height - 14 - pixelTextSize.Height);

                        // Draw the text
                        using (Brush brush = new SolidBrush(ColorTranslator.FromHtml("#5b615d")))
                        {
                            g.DrawString(text, font, brush, location, stringFormat);
                        }
                    }
                }
            }

            // Return the image
            args.Image = result;
        }
        catch
        {
            // An error has occurred...

            // Release the resources
            if (result != null)
            {
                result.Dispose();
                result = null;
            }

            // Re-throw the exception
            throw;
        }
    }
    protected override void Apply(ImageProcessingActionExecuteArgs args)
    {
        float normalizedRotationAngle = this._RotationAngle % 360F;

        if (normalizedRotationAngle == 0F)
        {
            // No need to rotate the image
            return;
        }

        Bitmap result = null;

        try
        {
            // Intial calculations
            double t;
            double t1;
            double b1;
            double t2;
            double b2;
            this.CalculateValues(args.Image.Size, out t, out t1, out b1, out t2, out b2);

            // Calculate the new image size
            Size outputImageSize = this.GetOutputImageSize(t1, b1, t2, b2);

            // Create the result image
            result = new Bitmap(outputImageSize.Width, outputImageSize.Height, CodeCarvings.Piczard.CommonData.DefaultPixelFormat);

            // Set the right image resolution (DPI)
            ImageHelper.SetImageResolution(result, args.ImageProcessingJob.OutputResolution);

            using (Graphics g = Graphics.FromImage(result))
            {
                // Use the max quality
                ImageHelper.SetGraphicsMaxQuality(g);

                if ((args.IsLastAction) && (!args.AppliedImageBackColorValue.HasValue))
                {
                    // Optimization (not mandatory)
                    // This is the last filter action and the ImageBackColor has not been yet applied...
                    // Apply the ImageBackColor now to save RAM & CPU
                    args.ApplyImageBackColor(g);
                }

                // Calculate the points for the DrawImage method
                Point[] shapePoints = new Point[3];

                if ((t >= 0D) && (t < (Math.PI / 2D)))
                {
                    shapePoints[0] = new Point(Convert.ToInt32(Math.Round(b2)), 0);
                    shapePoints[1] = new Point(outputImageSize.Width, Convert.ToInt32(Math.Round(t2)));
                    shapePoints[2] = new Point(0, Convert.ToInt32(Math.Round(b1)));
                }
                else if ((t >= (Math.PI / 2D)) && (t < Math.PI))
                {
                    shapePoints[0] = new Point(outputImageSize.Width, Convert.ToInt32(Math.Round(t2)));
                    shapePoints[1] = new Point(Convert.ToInt32(Math.Round(t1)), outputImageSize.Height);
                    shapePoints[2] = new Point(Convert.ToInt32(Math.Round(b2)), 0);
                }
                else if ((t >= Math.PI) && (t < (Math.PI + (Math.PI / 2D))))
                {
                    shapePoints[0] = new Point(Convert.ToInt32(Math.Round(t1)), outputImageSize.Height);
                    shapePoints[1] = new Point(0, Convert.ToInt32(Math.Round(b1)));
                    shapePoints[2] = new Point(outputImageSize.Width, Convert.ToInt32(Math.Round(t2)));
                }
                else
                {
                    shapePoints[0] = new Point(0, Convert.ToInt32(Math.Round(b1)));
                    shapePoints[1] = new Point(Convert.ToInt32(Math.Round(b2)), 0);
                    shapePoints[2] = new Point(Convert.ToInt32(Math.Round(t1)), outputImageSize.Height);
                }

                // Draw the image
                g.DrawImage(args.Image, shapePoints);
            }

            // Return the image
            args.Image = result;
        }
        catch
        {
            // An error has occurred...

            // Release the resources
            if (result != null)
            {
                result.Dispose();
                result = null;
            }

            // Re-throw the exception
            throw;
        }
    }
Пример #7
0
 protected override void Apply(ImageProcessingActionExecuteArgs args)
 {
     // This is only a container for multiple filters
     throw new Exception("Cannot invoke the Apply method.");
 }
Пример #8
0
    protected override void Apply(ImageProcessingActionExecuteArgs args)
    {
        Bitmap result = null;

        try
        {
            // Create the result image
            result = new Bitmap(350, 350, CodeCarvings.Piczard.CommonData.DefaultPixelFormat);

            // Set the right image resolution (DPI)
            ImageHelper.SetImageResolution(result, args.ImageProcessingJob.OutputResolution);

            using (Graphics g = Graphics.FromImage(result))
            {
                // Use the max quality
                ImageHelper.SetGraphicsMaxQuality(g);

                if ((args.IsLastAction) && (!args.AppliedImageBackColorValue.HasValue))
                {
                    // Optimization (not mandatory)
                    // This is the last filter action and the ImageBackColor has not been yet applied...
                    // Apply the ImageBackColor now to save RAM & CPU
                    args.ApplyImageBackColor(g);
                }

                using (ImageAttributes imageAttributes = new ImageAttributes())
                {
                    // Important
                    imageAttributes.SetWrapMode(WrapMode.TileFlipXY);

                    // Draw the scaled image
                    Rectangle destinationRectangle = new Rectangle(75, 52, 200, 200);
                    using (Image resizedImage = new FixedCropConstraint(GfxUnit.Pixel, destinationRectangle.Size).GetProcessedImage(args.Image))
                    {
                        g.DrawImage(resizedImage, destinationRectangle, 0, 0, resizedImage.Width, resizedImage.Height, GraphicsUnit.Pixel, imageAttributes);

                        // Draw the reflection
                        destinationRectangle = new Rectangle(75, 252, 200, 98);
                        using (Image flippedImage = ImageTransformation.FlipVertical.GetProcessedImage(resizedImage))
                        {
                            g.DrawImage(flippedImage, destinationRectangle, 0, 0, flippedImage.Width, flippedImage.Height, GraphicsUnit.Pixel, imageAttributes);
                        }
                    }

                    // Draw the mask
                    destinationRectangle = new Rectangle(0, 0, result.Width, result.Height);
                    using (LoadedImage loadedImage = ImageArchiver.LoadImage("~/repository/filters/MyCustomFilter1Mask.png"))
                    {
                        g.DrawImage(loadedImage.Image, destinationRectangle, 0, 0, loadedImage.Size.Width, loadedImage.Size.Height, GraphicsUnit.Pixel, imageAttributes);
                    }
                }

                // Draw the text
                string         text           = "Generated by 'MyCustomFilter1' on " + DateTime.Now.ToString();
                FontDefinition fontDefinition = new FontDefinition();
                fontDefinition.Size = 12; //12px
                using (Font font = fontDefinition.GetFont())
                {
                    // Setup the custom parameters
                    g.TextRenderingHint = TextRenderingHint.AntiAliasGridFit;

                    using (StringFormat stringFormat = new StringFormat())
                    {
                        SizeF textSize      = g.MeasureString(text, font, int.MaxValue, stringFormat);
                        Size  pixelTextSize = new Size(Convert.ToInt32(Math.Round(textSize.Width)), Convert.ToInt32(Math.Round(textSize.Height)));

                        // Calculate the text position
                        Point location = new Point((result.Width - pixelTextSize.Width) / 2, result.Height - 14 - pixelTextSize.Height);

                        // Draw the text
                        using (Brush brush = new SolidBrush(ColorTranslator.FromHtml("#5b615d")))
                        {
                            g.DrawString(text, font, brush, location, stringFormat);
                        }
                    }
                }
            }

            // Return the image
            args.Image = result;
        }
        catch
        {
            // An error has occurred...

            // Release the resources
            if (result != null)
            {
                result.Dispose();
                result = null;
            }

            // Re-throw the exception
            throw;
        }
    }