/// <summary>
        /// Sets the resolution of the image.
        /// <remarks>
        /// This method sets both the bitmap data and EXIF resolution if available.
        /// </remarks>
        /// </summary>
        /// <param name="horizontal">The horizontal resolution.</param>
        /// <param name="vertical">The vertical resolution.</param>
        /// <param name="unit">
        /// The unit of measure for the horizontal resolution and the vertical resolution. 
        /// Defaults to inches
        /// </param>
        /// <returns>
        /// The <see cref="ImageFactory"/>.
        /// </returns>
        public ImageFactory Resolution(int horizontal, int vertical, PropertyTagResolutionUnit unit = PropertyTagResolutionUnit.Inch)
        {
            if (this.ShouldProcess)
            {
                // Sanitize the input.
                horizontal = ImageMaths.Clamp(horizontal, 0, int.MaxValue);
                vertical = ImageMaths.Clamp(vertical, 0, int.MaxValue);

                Tuple<int, int, PropertyTagResolutionUnit> resolution =
                    new Tuple<int, int, PropertyTagResolutionUnit>(horizontal, vertical, unit);

                Resolution dpi = new Resolution { DynamicParameter = resolution };
                this.CurrentImageFormat.ApplyProcessor(dpi.ProcessImage, this);
            }

            return this;
        }
        /// <summary>
        /// Sets the resolution of the image.
        /// <remarks>
        /// This method sets both the bitmap data and EXIF resolution if available.
        /// </remarks>
        /// </summary>
        /// <param name="horizontal">The horizontal resolution.</param>
        /// <param name="vertical">The vertical resolution.</param>
        /// <param name="unit">
        /// The unit of measure for the horizontal resolution and the vertical resolution. 
        /// Defaults to inches
        /// </param>
        /// <returns>
        /// The <see cref="ImageFactory"/>.
        /// </returns>
        public ImageFactory Resolution(int horizontal, int vertical, PropertyTagResolutionUnit unit = PropertyTagResolutionUnit.Inch)
        {
            if (this.ShouldProcess)
            {
                // Sanitize the input.
                if (horizontal < 0 || vertical < 0)
                {
                    return this;
                }

                Tuple<int, int, PropertyTagResolutionUnit> resolution =
                    new Tuple<int, int, PropertyTagResolutionUnit>(horizontal, vertical, unit);

                Resolution dpi = new Resolution { DynamicParameter = resolution };
                this.backupFormat.ApplyProcessor(dpi.ProcessImage, this);
            }

            return this;
        }