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)); }
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)); }
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); }
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"); }
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"); }
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); }
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; } }