示例#1
0
        public static System.Drawing.Brush CreateGdipBrush(this AppSettings.ToolsSection toolSettings, bool swapColors)
        {
            ColorBgra32 a = toolSettings.PrimaryColor.Value;
            ColorBgra32 b = toolSettings.SecondaryColor.Value;

            if (swapColors)
            {
                ObjectUtil.Swap <ColorBgra32>(ref a, ref b);
            }
            return(toolSettings.CreateGdipBrush(a, b));
        }
示例#2
0
        public static PaintDotNet.UI.Media.Brush CreateBrush(this AppSettings.ToolsSection toolSettings, bool swapColors)
        {
            ColorBgra32 a = toolSettings.PrimaryColor.Value;
            ColorBgra32 b = toolSettings.SecondaryColor.Value;

            if (swapColors)
            {
                ObjectUtil.Swap <ColorBgra32>(ref a, ref b);
            }
            return(toolSettings.CreateBrush(a, b));
        }
示例#3
0
        public static System.Drawing.Pen CreatePen(this AppSettings.ToolsSection toolSettings, ColorBgra32 foreColor, ColorBgra32 backColor)
        {
            System.Drawing.Pen pen;
            LineCap            cap3;
            CustomLineCap      cap4;
            LineCap            cap5;
            CustomLineCap      cap6;
            float    width = toolSettings.Pen.Width.Value;
            LineCap2 cap   = toolSettings.Pen.StartCap.Value;
            LineCap2 cap2  = toolSettings.Pen.EndCap.Value;

            System.Drawing.Drawing2D.DashStyle style = toolSettings.Pen.DashStyle.Value;
            if (((PaintDotNet.BrushType)toolSettings.Brush.Type.Value) == PaintDotNet.BrushType.None)
            {
                pen = new System.Drawing.Pen((Color)foreColor, width);
            }
            else
            {
                pen = new System.Drawing.Pen(toolSettings.CreateGdipBrush(foreColor, backColor), width);
            }
            LineCapToLineCap2(cap, out cap3, out cap4);
            if (cap4 != null)
            {
                pen.CustomStartCap = cap4;
            }
            else
            {
                pen.StartCap = cap3;
            }
            LineCapToLineCap2(cap2, out cap5, out cap6);
            if (cap6 != null)
            {
                pen.CustomEndCap = cap6;
            }
            else
            {
                pen.EndCap = cap5;
            }
            pen.DashStyle = style;
            return(pen);
        }
示例#4
0
        public static System.Drawing.Brush CreateGdipBrush(this AppSettings.ToolsSection toolSettings, ColorBgra32 foreColor, ColorBgra32 backColor)
        {
            PaintDotNet.BrushType type = toolSettings.Brush.Type.Value;
            System.Drawing.Drawing2D.HatchStyle hatchstyle = toolSettings.Brush.HatchStyle.Value;
            switch (type)
            {
            case PaintDotNet.BrushType.Solid:
                return(new SolidBrush((Color)foreColor));

            case PaintDotNet.BrushType.Hatch:
                return(new System.Drawing.Drawing2D.HatchBrush(hatchstyle, (Color)foreColor, (Color)backColor));
            }
            throw new InvalidOperationException("BrushType is invalid");
        }
示例#5
0
        public static PaintDotNet.UI.Media.Brush CreateBrush(this AppSettings.ToolsSection toolSettings, ColorBgra32 foreColor, ColorBgra32 backColor)
        {
            PaintDotNet.BrushType           type       = toolSettings.Brush.Type.Value;
            PaintDotNet.UI.Media.HatchStyle hatchStyle = toolSettings.Brush.HatchStyle.Value;
            switch (type)
            {
            case PaintDotNet.BrushType.Solid:
                return(new SolidColorBrush((ColorRgba128Float)foreColor));

            case PaintDotNet.BrushType.Hatch:
                return(new PaintDotNet.UI.Media.HatchBrush(hatchStyle, (ColorRgba128Float)foreColor, (ColorRgba128Float)backColor));
            }
            throw new InvalidOperationException("BrushType is invalid");
        }
示例#6
0
        private ImageResource CreateImageResource(int width, int height, double borderSize)
        {
            ImageResource resource2;
            double        x = borderSize / 2.0;

            using (ISurface <ColorBgra> surface = SurfaceAllocator.Bgra.Allocate(width, height, AllocationOptions.ZeroFillNotRequired))
            {
                using (IDrawingContext context = DrawingContext.FromSurface(surface, AlphaMode.Premultiplied, FactorySource.PerThread))
                {
                    RectDouble num4;
                    context.Clear(null);
                    RectDouble num2        = new RectDouble(x, x, width - borderSize, height - borderSize);
                    double     aspectRatio = this.AspectRatio;
                    if (aspectRatio > 1.0)
                    {
                        double num5 = num2.Height / aspectRatio;
                        num4 = new RectDouble(num2.X, num2.Y + ((num2.Height - num5) / 2.0), num2.Width, num5);
                    }
                    else if (aspectRatio < 1.0)
                    {
                        double num6 = num2.Width * aspectRatio;
                        num4 = new RectDouble(num2.X + ((num2.Width - num6) / 2.0), num2.Y, num6, num2.Height);
                    }
                    else
                    {
                        num4 = num2;
                    }
                    IDictionary <string, object> settingValues = (from p in this.RenderSettingPaths select KeyValuePairUtil.Create <string, object>(p, AppSettings.Instance[ConvertToolsPathToToolDefaultsPath(p)].Value)).ToDictionary <string, object>();
                    ShapeRenderParameters        renderParams  = new ShapeRenderParameters(num4.TopLeft, num4.BottomRight, new VectorDouble(1.0, 1.0), settingValues, null);
                    PropertyCollection           properties    = this.CreatePropertyCollection(renderParams);
                    this.OnSetImagePropertyCollectionValues(renderParams, properties);
                    IDictionary <object, object> propertyValues = (from p in properties select KeyValuePairUtil.Create <object, object>(p.GetOriginalNameValue(), p.Value)).ToDictionary <object, object>();
                    ShapeRenderParameters        parameters2    = new ShapeRenderParameters(num4.TopLeft, num4.BottomRight, new VectorDouble(1.0, 1.0), settingValues, propertyValues);
                    ShapeRenderData            data             = this.CreateImageRenderData(parameters2);
                    PaintDotNet.UI.Media.Brush brush            = SolidColorBrushCache.Get((ColorRgba128Float)ColorBgra.FromUInt32(0xff5894c1));
                    if (data.InteriorFill != null)
                    {
                        context.FillGeometry(data.InteriorFill.Geometry, SolidColorBrushCache.Get((ColorRgba128Float)Colors.White), null);
                        LinearGradientBrush brush2 = new LinearGradientBrush {
                            StartPoint = num4.TopLeft,
                            EndPoint   = num4.BottomRight
                        };
                        brush2.GradientStops.Add(new GradientStop((ColorRgba128Float)ColorBgra32.FromUInt32(0xffc0e1f3), 0.0));
                        brush2.GradientStops.Add(new GradientStop((ColorRgba128Float)ColorBgra32.FromUInt32(0xffe0eff8), 1.0));
                        context.FillGeometry(data.InteriorFill.Geometry, brush2, null);
                    }
                    if ((data.InteriorFill != null) && (data.OutlineDraw != null))
                    {
                        RenderLayer layer = RenderLayerCache.Get();
                        using (context.UseLayer(layer, null, data.InteriorFill.Geometry, AntialiasMode.PerPrimitive, null, 1.0, null, LayerOptions.None))
                        {
                            context.DrawGeometry(data.OutlineDraw.Geometry, SolidColorBrushCache.Get((ColorRgba128Float)Colors.White), 3.0);
                        }
                        RenderLayerCache.Return(layer);
                    }
                    if (data.OutlineDraw != null)
                    {
                        context.DrawGeometry(data.OutlineDraw.Geometry, brush, 1.0);
                    }
                    if (data.OutlineFill != null)
                    {
                        context.FillGeometry(data.OutlineFill.Geometry, brush, null);
                    }
                    string imageStringOverlay = this.ImageStringOverlay;
                    if (imageStringOverlay != string.Empty)
                    {
                        double     num7       = (width * 7.0) / 16.0;
                        double     fontSize   = UIUtil.ScaleWidth(num7);
                        TextLayout textLayout = new TextLayout(imageStringOverlay, "Arial", FontWeight.Normal, PaintDotNet.DirectWrite.FontStyle.Normal, FontStretch.Normal, fontSize)
                        {
                            ParagraphAlignment = ParagraphAlignment.Center,
                            TextAlignment      = PaintDotNet.DirectWrite.TextAlignment.Center,
                            MaxWidth           = width - 2,
                            MaxHeight          = height - 2
                        };
                        context.DrawTextLayout(new PointDouble(1.0, 1.0), textLayout, SolidColorBrushCache.Get((ColorRgba128Float)ColorBgra.FromUInt32(0xff5894c1)), DrawTextOptions.None);
                    }
                }
                surface.ConvertFromPremultipliedAlpha();
                using (System.Drawing.Bitmap bitmap = surface.CreateAliasedGdipBitmap())
                {
                    System.Drawing.Bitmap image = new System.Drawing.Bitmap(bitmap);
                    resource2 = ImageResource.FromImage(image);
                }
            }
            return(resource2);
        }
示例#7
0
        private unsafe void RenderContent(ISurface <ColorBgra> dstContent, PointInt32 renderOffset)
        {
            int        width         = dstContent.Width;
            int        height        = dstContent.Height;
            int        stride        = dstContent.Stride;
            int        num4          = stride - (width * 4);
            RectInt32  num5          = RectInt32.Intersect(this.srcCoverageBounds, new RectInt32(0, 0, this.contentWidth, this.contentHeight));
            int        left          = num5.Left;
            int        top           = num5.Top;
            int        right         = num5.Right;
            int        bottom        = num5.Bottom;
            long       num10         = (this.srcOffsetOriginXFp + (renderOffset.X * this.srcOffsetDxDxFp)) + (renderOffset.Y * this.srcOffsetDxDyFp);
            long       num11         = (this.srcOffsetOriginYFp + (renderOffset.X * this.srcOffsetDyDxFp)) + (renderOffset.Y * this.srcOffsetDyDyFp);
            ColorBgra *bgraPtr       = this.contentScan0;
            int        contentStride = this.contentStride;
            ColorBgra *bgraPtr2      = (ColorBgra *)dstContent.Scan0;
            ColorBgra *bgraPtr3      = bgraPtr2 + width;

            for (int i = 0; i < height; i++)
            {
                uint num16;
                int  num17;
                base.ThrowIfCancellationRequested();
                long       num14    = num10;
                long       num15    = num11;
                ColorBgra *bgraPtr4 = bgraPtr3 - width;
                int        num18    = (int)((long)((bgraPtr3 - bgraPtr4) / sizeof(ColorBgra)));
                int        num19    = (int)(num14 >> 0x18);
                int        num20    = (int)(num15 >> 0x18);
                int        num21    = ((num19 >= left) && (num19 < right)) ? 1 : 0;
                int        num22    = ((num20 >= top) && (num20 < bottom)) ? 1 : 0;
                int        num23    = ((num19 >= (left - 1)) && (num19 < (right - 1))) ? 1 : 0;
                int        num24    = ((num20 >= (top - 1)) && (num20 < (bottom - 1))) ? 1 : 0;
                long       num25    = num14 + (this.srcOffsetDxDxFp * num18);
                long       num26    = num15 + (this.srcOffsetDyDxFp * num18);
                int        num27    = (int)(num25 >> 0x18);
                int        num28    = (int)(num26 >> 0x18);
                int        num29    = ((num27 >= left) && (num27 < right)) ? 1 : 0;
                int        num30    = ((num28 >= top) && (num28 < bottom)) ? 1 : 0;
                int        num31    = ((num27 >= (left - 1)) && (num27 < (right - 1))) ? 1 : 0;
                int        num32    = ((num28 >= (top - 1)) && (num28 < (bottom - 1))) ? 1 : 0;
                if ((((((((num21 + num22) + num23) + num24) + num29) + num30) + num31) + num32) == 8)
                {
                    num17 = num18;
                }
                else
                {
                    num17 = 0;
                }
                while ((bgraPtr4 < bgraPtr3) && (num17 > 0))
                {
                    num16 = 0;
                    int         num33 = (int)(num14 >> 0x18);
                    int         num34 = (int)(num15 >> 0x18);
                    int         num35 = 0x100 - (((int)(num14 & 0xffffffL)) >> 0x10);
                    int         num36 = 0x100 - (((int)(num15 & 0xffffffL)) >> 0x10);
                    int         num37 = (num35 * num36) >> 8;
                    int         num38 = ((0x100 - num35) * num36) >> 8;
                    int         num39 = (num35 * (0x100 - num36)) >> 8;
                    int         num40 = ((0x100 - num35) * (0x100 - num36)) >> 8;
                    int         num41 = num37;
                    int         num42 = num38;
                    int         num43 = num39;
                    int         num44 = num40;
                    ushort      d     = (ushort)(((num41 + num42) + num43) + num44);
                    long        num46 = (num34 * contentStride) + (num33 * 4);
                    ColorBgra32 bgra  = *((ColorBgra32 *)(bgraPtr + num46));
                    ColorBgra32 bgra2 = *((ColorBgra32 *)(bgraPtr + (num46 + 4L)));
                    ColorBgra32 bgra3 = *((ColorBgra32 *)(bgraPtr + (num46 + contentStride)));
                    ColorBgra32 bgra4 = *((ColorBgra32 *)(bgraPtr + ((num46 + contentStride) + 4L)));
                    int         num47 = bgra.A * num41;
                    int         num48 = bgra2.A * num42;
                    int         num49 = bgra3.A * num43;
                    int         num50 = bgra4.A * num44;
                    ushort      n     = (ushort)(((num47 + num48) + num49) + num50);
                    if (n != 0)
                    {
                        uint num52 = UInt32Util.FastDivideByUInt16(n, d);
                        uint num53 = UInt32Util.FastDivideByUInt16((uint)((((num47 * bgra.B) + (num48 * bgra2.B)) + (num49 * bgra3.B)) + (num50 * bgra4.B)), n);
                        uint num54 = UInt32Util.FastDivideByUInt16((uint)((((num47 * bgra.G) + (num48 * bgra2.G)) + (num49 * bgra3.G)) + (num50 * bgra4.G)), n);
                        uint num55 = UInt32Util.FastDivideByUInt16((uint)((((num47 * bgra.R) + (num48 * bgra2.R)) + (num49 * bgra3.R)) + (num50 * bgra4.R)), n);
                        num16 = ColorBgra.BgraToUInt32((byte)num53, (byte)num54, (byte)num55, (byte)num52);
                    }
                    bgraPtr4->Bgra = num16;
                    num14         += this.srcOffsetDxDxFp;
                    num15         += this.srcOffsetDyDxFp;
                    bgraPtr4++;
                    num17--;
                }
                while (bgraPtr4 < bgraPtr3)
                {
                    num16 = 0;
                    int num56 = (int)(num14 >> 0x18);
                    int num57 = (int)(num15 >> 0x18);
                    int num58 = ((num56 >= left) && (num56 < right)) ? 1 : 0;
                    int num59 = ((num57 >= top) && (num57 < bottom)) ? 1 : 0;
                    int num60 = ((num56 >= (left - 1)) && (num56 < (right - 1))) ? 1 : 0;
                    int num61 = ((num57 >= (top - 1)) && (num57 < (bottom - 1))) ? 1 : 0;
                    int num62 = num59 * num58;
                    int num63 = num59 * num60;
                    int num64 = num61 * num58;
                    int num65 = num61 * num60;
                    if ((((num62 + num63) + num64) + num65) != 0)
                    {
                        int         num67 = 0x100 - (((int)(num14 & 0xffffffL)) >> 0x10);
                        int         num68 = 0x100 - (((int)(num15 & 0xffffffL)) >> 0x10);
                        int         num69 = (num67 * num68) >> 8;
                        int         num70 = ((0x100 - num67) * num68) >> 8;
                        int         num71 = (num67 * (0x100 - num68)) >> 8;
                        int         num72 = ((0x100 - num67) * (0x100 - num68)) >> 8;
                        int         num73 = num62 * num69;
                        int         num74 = num63 * num70;
                        int         num75 = num64 * num71;
                        int         num76 = num65 * num72;
                        ushort      num77 = (ushort)(((num73 + num74) + num75) + num76);
                        long        num78 = (num57 * contentStride) + (num56 * 4);
                        ColorBgra32 bgra5 = *((ColorBgra32 *)(bgraPtr + (num78 * num62)));
                        ColorBgra32 bgra6 = *((ColorBgra32 *)(bgraPtr + ((num78 + 4L) * num63)));
                        ColorBgra32 bgra7 = *((ColorBgra32 *)(bgraPtr + ((num78 + contentStride) * num64)));
                        ColorBgra32 bgra8 = *((ColorBgra32 *)(bgraPtr + (((num78 + contentStride) + 4L) * num65)));
                        int         num79 = bgra5.A * num73;
                        int         num80 = bgra6.A * num74;
                        int         num81 = bgra7.A * num75;
                        int         num82 = bgra8.A * num76;
                        ushort      num83 = (ushort)(((num79 + num80) + num81) + num82);
                        if (num83 != 0)
                        {
                            uint num84 = UInt32Util.FastDivideByUInt16(num83, num77);
                            uint num85 = UInt32Util.FastDivideByUInt16((uint)((((num79 * bgra5.B) + (num80 * bgra6.B)) + (num81 * bgra7.B)) + (num82 * bgra8.B)), num83);
                            uint num86 = UInt32Util.FastDivideByUInt16((uint)((((num79 * bgra5.G) + (num80 * bgra6.G)) + (num81 * bgra7.G)) + (num82 * bgra8.G)), num83);
                            uint num87 = UInt32Util.FastDivideByUInt16((uint)((((num79 * bgra5.R) + (num80 * bgra6.R)) + (num81 * bgra7.R)) + (num82 * bgra8.R)), num83);
                            num16 = ColorBgra.BgraToUInt32((byte)num85, (byte)num86, (byte)num87, (byte)num84);
                        }
                    }
                    bgraPtr4->Bgra = num16;
                    num14         += this.srcOffsetDxDxFp;
                    num15         += this.srcOffsetDyDxFp;
                    bgraPtr4++;
                }
                num10    += this.srcOffsetDxDyFp;
                num11    += this.srcOffsetDyDyFp;
                bgraPtr3 += stride;
            }
        }