Ejemplo n.º 1
0
 /// <summary>
 /// See base docs.
 /// </summary>
 /// <param name="brush"></param>
 /// <param name="x"></param>
 /// <param name="y"></param>
 /// <param name="width"></param>
 /// <param name="height"></param>
 public override void FillRectangle(VrsDrawing.IBrush brush, int x, int y, int width, int height)
 {
     GdiPlusLock.EnforceSingleThread(() => {
         if (brush is BrushWrapper brushWrapper)
         {
             NativeDrawingContext.FillRectangle(brushWrapper.NativeBrush, x, y, width, height);
         }
     });
 }
Ejemplo n.º 2
0
        /// <summary>
        /// See interface docs.
        /// </summary>
        /// <param name="red"></param>
        /// <param name="green"></param>
        /// <param name="blue"></param>
        /// <param name="alpha"></param>
        /// <param name="isCached"></param>
        /// <returns></returns>
        protected override VrsDrawing.IBrush CreateBrushWrapper(int red, int green, int blue, int alpha, bool isCached)
        {
            VrsDrawing.IBrush result = null;

            GdiPlusLock.EnforceSingleThread(() => {
                result = new BrushWrapper(
                    new SolidBrush(Color.FromArgb(alpha, red, green, blue)),
                    isCached
                    );
            });

            return(result);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// See interface docs.
        /// </summary>
        /// <param name="pixelWidth"></param>
        /// <param name="pixelHeight"></param>
        /// <param name="backgroundBrush"></param>
        /// <returns></returns>
        public VrsDrawing.IImage Create(int pixelWidth, int pixelHeight, VrsDrawing.IBrush backgroundBrush)
        {
            var image = new Bitmap(
                pixelWidth,
                pixelHeight,
                PixelFormat.Format32bppArgb
                );

            GdiPlusLock.EnforceSingleThread(() => {
                using (var drawing = new Drawing(Graphics.FromImage(image)))  {
                    drawing.FillRectangle(backgroundBrush, 0, 0, pixelWidth, pixelHeight);
                }
            });

            return(new ImageWrapper(image));
        }
Ejemplo n.º 4
0
        /// <summary>
        /// See base docs.
        /// </summary>
        /// <param name="text"></param>
        /// <param name="font"></param>
        /// <param name="fillBrush"></param>
        /// <param name="outlinePen"></param>
        /// <param name="x"></param>
        /// <param name="y"></param>
        /// <param name="alignment"></param>
        /// <param name="preferSpeedOverQuality"></param>
        public override void DrawText(string text, VrsDrawing.IFont font, VrsDrawing.IBrush fillBrush, VrsDrawing.IPen outlinePen, float x, float y, VrsDrawing.HorizontalAlignment alignment, bool preferSpeedOverQuality = true)
        {
            if (font is FontWrapper fontWrapper)
            {
                GdiPlusLock.EnforceSingleThread(() => {
                    var location = new PointF(x, y);

                    // Mono ignores these flags...
                    var stringFormat = new StringFormat()
                    {
                        Alignment     = Convert.ToSystemDrawingStringAlignment(alignment),
                        LineAlignment = Convert.ToSystemDrawingStringAlignment(alignment),
                        FormatFlags   = StringFormatFlags.NoWrap,
                    };

                    using (var graphicsPath = new GraphicsPath()) {
                        graphicsPath.AddString(
                            text,
                            fontWrapper.NativeFont.FontFamily,
                            (int)fontWrapper.NativeFont.Style,
                            fontWrapper.NativeFont.Size,
                            location,
                            stringFormat
                            );

                        NativeDrawingContext.SmoothingMode     = SmoothingMode.AntiAlias;
                        NativeDrawingContext.InterpolationMode = InterpolationMode.HighQualityBicubic;

                        if (outlinePen is PenWrapper outlinePenWrapper)
                        {
                            NativeDrawingContext.DrawPath(outlinePenWrapper.NativePen, graphicsPath);
                        }
                        if (fillBrush is BrushWrapper fillBrushWrapper)
                        {
                            NativeDrawingContext.FillPath(fillBrushWrapper.NativeBrush, graphicsPath);
                        }
                    }
                });
            }
        }
Ejemplo n.º 5
0
        /// <summary>
        /// See base docs.
        /// </summary>
        /// <param name="width"></param>
        /// <param name="height"></param>
        /// <param name="mode"></param>
        /// <param name="zoomBackground"></param>
        /// <param name="preferSpeedOverQuality"></param>
        /// <returns></returns>
        public override VrsDrawing.IImage Resize(int width, int height, VrsDrawing.ResizeMode mode = VrsDrawing.ResizeMode.Normal, VrsDrawing.IBrush zoomBackground = null, bool preferSpeedOverQuality = true)
        {
            var result = new Bitmap(width, height, PixelFormat.Format32bppArgb);
            var zoomBackgroundBrushWrapper = zoomBackground as BrushWrapper;

            GdiPlusLock.EnforceSingleThread(() => {
                using (var graphics = Graphics.FromImage(result)) {
                    graphics.SmoothingMode     = SmoothingMode.AntiAlias;
                    graphics.InterpolationMode = preferSpeedOverQuality ? InterpolationMode.Bicubic : InterpolationMode.HighQualityBicubic;
                    graphics.PixelOffsetMode   = PixelOffsetMode.HighQuality;

                    var newWidth  = width;
                    var newHeight = height;
                    var left      = 0;
                    var top       = 0;

                    if (mode != VrsDrawing.ResizeMode.Stretch)
                    {
                        var widthPercent  = (double)newWidth / (double)NativeImage.Width;
                        var heightPercent = (double)newHeight / (double)NativeImage.Height;

                        switch (mode)
                        {
                        case VrsDrawing.ResizeMode.Zoom:
                            // Resize the longest side by the smallest percentage
                            graphics.FillRectangle(zoomBackgroundBrushWrapper.NativeBrush, 0, 0, result.Width, result.Height);
                            if (widthPercent > heightPercent)
                            {
                                newWidth = Math.Min(newWidth, (int)(((double)NativeImage.Width * heightPercent) + 0.5));
                            }
                            else if (heightPercent > widthPercent)
                            {
                                newHeight = Math.Min(newHeight, (int)(((double)NativeImage.Height * widthPercent) + 0.5));
                            }
                            break;

                        case VrsDrawing.ResizeMode.Normal:
                        case VrsDrawing.ResizeMode.Centre:
                            // Resize the smallest side by the largest percentage
                            if (widthPercent > heightPercent)
                            {
                                newHeight = Math.Max(newHeight, (int)(((double)NativeImage.Height * widthPercent) + 0.5));
                            }
                            else if (heightPercent > widthPercent)
                            {
                                newWidth = Math.Max(newWidth, (int)(((double)NativeImage.Width * heightPercent) + 0.5));
                            }
                            break;
                        }

                        if (mode != VrsDrawing.ResizeMode.Normal)
                        {
                            left = (width - newWidth) / 2;
                            top  = (height - newHeight) / 2;
                        }
                    }

                    graphics.DrawImage(NativeImage, left, top, newWidth, newHeight);
                }
            });

            return(new ImageWrapper(result));
        }
Ejemplo n.º 6
0
 /// <summary>
 /// See interface docs.
 /// </summary>
 /// <param name="width"></param>
 /// <param name="height"></param>
 /// <param name="mode"></param>
 /// <param name="zoomBackground"></param>
 /// <param name="preferSpeedOverQuality"></param>
 /// <returns></returns>
 public abstract VrsDrawing.IImage Resize(int width, int height, VrsDrawing.ResizeMode mode = VrsDrawing.ResizeMode.Normal, VrsDrawing.IBrush zoomBackground = null, bool preferSpeedOverQuality = true);
Ejemplo n.º 7
0
 /// <summary>
 /// Creates a new object.
 /// </summary>
 public CommonBrushFactory()
 {
     Transparent = CreateBrush(255, 255, 255, 0, useCache: true);
 }
Ejemplo n.º 8
0
 /// <summary>
 /// See interface docs.
 /// </summary>
 /// <param name="text"></param>
 /// <param name="font"></param>
 /// <param name="fillBrush"></param>
 /// <param name="outlinePen"></param>
 /// <param name="x"></param>
 /// <param name="y"></param>
 /// <param name="alignment"></param>
 /// <param name="preferSpeedOverQuality"></param>
 public abstract void DrawText(string text, VrsDrawing.IFont font, VrsDrawing.IBrush fillBrush, VrsDrawing.IPen outlinePen, float x, float y, VrsDrawing.HorizontalAlignment alignment, bool preferSpeedOverQuality = true);
Ejemplo n.º 9
0
 /// <summary>
 /// See interface docs.
 /// </summary>
 /// <param name="brush"></param>
 /// <param name="x"></param>
 /// <param name="y"></param>
 /// <param name="width"></param>
 /// <param name="height"></param>
 public abstract void FillRectangle(VrsDrawing.IBrush brush, int x, int y, int width, int height);