예제 #1
0
        private void btnBegin_Click(object sender, EventArgs e)
        {
            //清空文本,不能给text赋值,否则颜色设置会出现问题
            rtbInfo.Clear();
            //检测路径合法性
            if (!Directory.Exists(tbInput.Text) || !Directory.Exists(tbOutput.Text))
            {
                rtbInfo.SelectionColor = Color.Red;
                rtbInfo.AppendText("输入路径或输出路径不存在\n");
                return;
            }
            //准备转换工作
            btnBegin.Enabled       = false;
            rtbInfo.SelectionColor = Color.Green;
            rtbInfo.AppendText("开始转换,如无特殊需要请勿修改参数...\n");
            string[] svgs = Directory.GetFiles(tbInput.Text, "*.svg");
            rtbInfo.SelectionColor = Color.Black;
            rtbInfo.AppendText("共读取到" + svgs.Length + "个svg文件\n");
            int successCount = 0;

            //开始每一次转换
            for (int i = 0; i < svgs.Length; i++)
            {
                Bitmap   bitmap   = new Bitmap((int)nudWidth.Value, (int)nudHeight.Value);
                Graphics graphics = Graphics.FromImage(bitmap);
                //可能会出现路径问题或其他错误,记录成功个数
                try
                {
                    SvgDocument  svgDocument = SvgDocument.Open(svgs[i]);
                    ISvgRenderer renderer    = SvgRenderer.FromGraphics(graphics);
                    svgDocument.Width  = (int)nudWidth.Value;
                    svgDocument.Height = (int)nudHeight.Value;
                    svgDocument.Draw(renderer);
                    bitmap.Save(tbOutput.Text + "\\" + Path.GetFileNameWithoutExtension(svgs[i]) + "." + cbFormat.Text);//怕读取顺序与原顺序不一样,所以按照原名字保存
                    successCount++;
                    rtbInfo.AppendText("第" + (i + 1) + "个转换成功\n");
                }
                catch
                {
                    rtbInfo.SelectionColor = Color.Red;
                    rtbInfo.AppendText("第" + (i + 1) + "个转换失败");
                    rtbInfo.SelectionColor = Color.Black;
                }
            }
            //转换完成,完成善后工作
            rtbInfo.SelectionColor = Color.Green;
            rtbInfo.AppendText("转换完成,共" + svgs.Length + "个文件," + successCount + "个转换成功");
            btnBegin.Enabled = true;
        }
예제 #2
0
        public static void Run()
        {
            // ExStart:1
            string dataDir = RunExamples.GetDataDir_Data();

            using (var document = new Aspose.Html.Dom.Svg.SVGDocument("<svg xmlns='http://www.w3.org/2000/svg'><circle cx='50' cy='50' r='40'/></svg>", @"c:\work\"))
            {
                using (SvgRenderer renderer = new SvgRenderer())
                    using (ImageDevice device = new ImageDevice(dataDir + @"document_out.png"))
                    {
                        renderer.Render(device, document);
                    }
            }
            // ExEnd:1
        }
        public static void Run()
        {
            //ExStart: ConvertSVGFilesUsingRenderer
            string dataDir = RunExamples.GetDataDir_Data();

            using (var document = new SVGDocument(Path.Combine(dataDir, "smiley.svg")))
            {
                using (SvgRenderer renderer = new SvgRenderer())
                    using (XpsDevice device = new XpsDevice(dataDir + "ConvertSVGFilesUsingRenderer_out.xps"))
                    {
                        renderer.Render(device, document);
                    }
            }
            //ExEnd: ConvertSVGFilesUsingRenderer
        }
예제 #4
0
        private void button_toVector_Click(object sender, EventArgs e)
        {
            StartEvent();
            SvgRenderer svg = new SvgRenderer();

            SvgRenderer.SvgImage si = svg.Render(qrCodeWriter.Encode(qCode), qrCodeWriter.Format, qCode);
            var file = File.Open("D:\\a.eps", FileMode.OpenOrCreate);

            byte[] b = Encoding.UTF8.GetBytes(si.ToString());
            file.Write(b, 0, b.Length);
            file.Close();
            application.ActiveLayer.Import("D:\\a.eps");
            //File.Delete("D:\\a.eps");
            EndEvent();
        }
예제 #5
0
        static public CodeRenderer          Create(CodeRenderType eType, CodeRenderOptions xOptions = null)
        {
            CodeRenderer xRenderer = null;

            //
            switch (eType)
            {
            case CodeRenderType.Svg: xRenderer = new SvgRenderer(); break;

            case CodeRenderType.Png: xRenderer = new PngRenderer(); break;
            }
            //
            xRenderer.m_xOptions = xOptions;
            //
            return(xRenderer);
        }
예제 #6
0
        protected Bitmap PaintChart(DevExpress.XtraCharts.Native.Chart chart,
                                    int width = 2000, int height = 1200, int?dpi = null)
        {
            if (_Chart.Diagram != null)
            {
                SetupDiagram(_Chart.Diagram);
            }

            if (dpi == null || dpi == 0)
            {
                dpi = DefaultDPI;
            }

            float scaleBitmap = dpi.Value / 300f;
            float scaleSVG    = scaleBitmap * 96f / 300f;

            var svg = chart.CreateSvg(new Size((int)Math.Ceiling(width * scaleSVG), (int)Math.Ceiling(height * scaleSVG)));

            var doc = SvgDocument.Open(svg);

            doc.ShapeRendering = SvgShapeRendering.GeometricPrecision;

            var bitmap = new Bitmap((int)Math.Ceiling(width * scaleBitmap), (int)Math.Ceiling(height * scaleBitmap));

            bitmap.SetResolution(dpi.Value, dpi.Value);

            using (var graphics = Graphics.FromImage(bitmap))
            {
                graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
                graphics.PixelOffsetMode   = PixelOffsetMode.HighQuality;
                graphics.SmoothingMode     = SmoothingMode.HighQuality;
                graphics.TextRenderingHint = TextRenderingHint.ClearTypeGridFit;

                graphics.Clear(Color.White);

                var renderer = SvgRenderer.FromGraphics(graphics);
                renderer.SmoothingMode = SmoothingMode.HighQuality;
                if (scaleSVG != 1f && scaleSVG > 0f)
                {
                    renderer.ScaleTransform(1 / scaleSVG, 1 / scaleSVG);
                }

                doc.Draw(renderer);
            }

            return(bitmap);
        }
예제 #7
0
        private Bitmap CreateSourceGraphic()
        {
            var graphic = new Bitmap((int)(_bounds.Width + 2 * _inflate * _bounds.Width + _bounds.X),
                                     (int)(_bounds.Height + 2 * _inflate * _bounds.Height + _bounds.Y));

            using (var renderer = SvgRenderer.FromImage(graphic))
            {
                renderer.SetBoundable(_renderer.GetBoundable());
                var transform = new Matrix();
                transform.Translate(_bounds.Width * _inflate, _bounds.Height * _inflate);
                renderer.Transform = transform;
                //renderer.Transform = _renderer.Transform;
                //renderer.Clip = _renderer.Clip;
                _renderMethod.Invoke(renderer);
            }
            return(graphic);
        }
예제 #8
0
        public SvgRenderer GetIconRenderer(GraphNode node)
        {
            if (node == null)
            {
                throw new ArgumentNullException("node");
            }

            var            icon          = node.Icon;
            SvgRenderer    renderer      = null;
            Stack <string> fallbackIcons = null;

            while (icon != null)
            {
                if (TryGetIconRenderer(icon, out renderer))
                {
                    break;
                }
                else
                {
                    if (fallbackIcons == null)
                    {
                        fallbackIcons = new Stack <string>();
                    }
                    fallbackIcons.Push(icon.Name);
                    icon = icon.GetDefaultIcon();
                }
            }

            if (renderer == null)
            {
                if (node.Icon.IsIncludeElement)
                {
                    TryGetIconRenderer(ElementIcon.Include, out renderer);
                }
                else
                {
                    TryGetIconRenderer(ElementIcon.Default, out renderer);
                }
            }

            while (fallbackIcons != null && fallbackIcons.Count > 0)
            {
                rendererCache.Add(fallbackIcons.Pop(), renderer);
            }
            return(renderer);
        }
예제 #9
0
        protected virtual Bitmap PaintSankey(SankeyDiagramHostControl sankey, int?dpi = null)
        {
            if (dpi == null || dpi == 0)
            {
                dpi = DefaultDPI;
            }

            float scaleBitmap = dpi.Value / 300f;
            float scaleSVG    = 1f;

            using var streamSvg = new MemoryStream();
            sankey.ExportToSvg(streamSvg);
            streamSvg.Seek(0, SeekOrigin.Begin);

            var doc = SvgDocument.Open <SvgDocument>(streamSvg);

            doc.ShapeRendering = SvgShapeRendering.GeometricPrecision;

            streamSvg.Close();

            var bitmap = new Bitmap((int)Math.Ceiling(sankey.Width * scaleBitmap), (int)Math.Ceiling(sankey.Height * scaleBitmap));

            bitmap.SetResolution(dpi.Value, dpi.Value);

            using (var graphics = Graphics.FromImage(bitmap))
            {
                graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
                graphics.PixelOffsetMode   = PixelOffsetMode.HighQuality;
                graphics.SmoothingMode     = SmoothingMode.HighQuality;
                graphics.TextRenderingHint = TextRenderingHint.ClearTypeGridFit;

                graphics.Clear(Color.White);

                var renderer = SvgRenderer.FromGraphics(graphics);
                renderer.SmoothingMode = SmoothingMode.HighQuality;
                if (scaleSVG != 1f && scaleSVG > 0f)
                {
                    renderer.ScaleTransform(1 / scaleSVG, 1 / scaleSVG);
                }

                doc.Draw(renderer);
            }

            return(bitmap);
        }
예제 #10
0
        public void ApplyFilter(SvgVisualElement element, SvgRenderer renderer)
        {
            this.Buffer.Clear();
            this.PopulateDefaults(element, renderer);

            IEnumerable <SvgFilterPrimitive> primitives = this.Children.OfType <SvgFilterPrimitive>();

            if (primitives.Count() > 0)
            {
                foreach (var primitive in primitives)
                {
                    this.Buffer.Add(primitive.Result, (e, r) => primitive.Process());
                }

                // Render the final filtered image
                renderer.DrawImageUnscaled(this.Buffer.Last().Value(element, renderer), new Point(0, 0));
            }
        }
예제 #11
0
파일: SvgFilter.cs 프로젝트: DnevnikRu/SVG
        public void ApplyFilter(SvgVisualElement element, SvgRenderer renderer)
        {
            this.Buffer.Clear();
            this.PopulateDefaults(element, renderer);

            IEnumerable<SvgFilterPrimitive> primitives = this.Children.OfType<SvgFilterPrimitive>();

            if (primitives.Count() > 0)
            {
                foreach (var primitive in primitives)
                {
                    this.Buffer.Add(primitive.Result, (e, r) => primitive.Process());
                }

                // Render the final filtered image
                renderer.DrawImageUnscaled(this.Buffer.Last().Value(element, renderer), new Point(0, 0));
            }
        }
예제 #12
0
        public void TestSmoothingModeRestoreForGraphics()
        {
            var visualElementMock = new Mock <SvgVisualElement>();

            visualElementMock.Setup(_ => _.Attributes).CallBase();

            var visualElement = visualElementMock.Object;

            visualElement.ShapeRendering = SvgShapeRendering.Auto;

            var g        = Graphics.FromHwnd(IntPtr.Zero);
            var renderer = SvgRenderer.FromGraphics(g);

            g.SmoothingMode = SmoothingMode.AntiAlias;

            visualElement.RenderElement(renderer);

            Assert.That(g.SmoothingMode, Is.EqualTo(SmoothingMode.AntiAlias));
        }
예제 #13
0
        private Bitmap CreateSourceGraphic(SvgVisualElement element, SvgRenderer renderer)
        {
            if (this.sourceGraphic == null)
            {
                RectangleF bounds = element.Path.GetBounds();
                this.sourceGraphic = new Bitmap((int)bounds.Width, (int)bounds.Height);

                using (var graphics = Graphics.FromImage(this.sourceGraphic))
                {
                    graphics.Clip      = renderer.Clip;
                    graphics.Transform = renderer.Transform;

                    element.RenderElement(SvgRenderer.FromGraphics(graphics));

                    graphics.Save();
                }
            }

            return(this.sourceGraphic);
        }
예제 #14
0
 public void Draw(Graphics gr, RectangleF rect, ImageAttributes attributes = null)
 {
     if (IsSVG)
     {
         //EnsureSVG();  // either of these following lines can be used to test function below
         //Draw(gr, rect, new RectangleF(0, 0, m_SVG.Width, m_SVG.Height), attributes);
         //Draw(gr, new PointF[] { rect.Location, rect.TopRight(), rect.BottomLeft() }, new RectangleF(0, 0, m_SVG.Width, m_SVG.Height), attributes);
         //return;
         var state = gr.Save();
         using (ISvgRenderer render = SvgRenderer.FromGraphics(gr))
         {
             //render.Transform = gr.Transform; - redundant as it does this anyway.  Doing this ...Clone might be useful so the original matrix didn't get corrupted, but safer to just store entire state anyway
             render.TranslateTransform(rect.Left, rect.Top, MatrixOrder.Prepend);
             render.ScaleTransform(rect.Width / m_SVG.Width, rect.Height / m_SVG.Height, MatrixOrder.Prepend);
             m_SVG.Draw(render);
         }
         gr.Restore(state);
     }
     else
     {
         gr.DrawImage(GetNetImage(), rect, attributes);
     }
 }
예제 #15
0
        static Bitmap RenderSvg(SvgDocument svgDoc, double scaleFactor, int oversampling)
        {
            var dimensions  = svgDoc.GetDimensions();
            var finalWidth  = (int)Math.Round(dimensions.Width * scaleFactor);
            var finalHeight = (int)Math.Round(dimensions.Height * scaleFactor);

            var renderWidth  = finalWidth * oversampling;
            var renderHeight = finalHeight * oversampling;

            var bitmap = new Bitmap(
                renderWidth,
                renderHeight,
                PixelFormat.Format32bppArgb);

            using (Graphics g = Graphics.FromImage(bitmap))
            {
                g.TextRenderingHint  = TextRenderingHint.AntiAlias;
                g.PixelOffsetMode    = PixelOffsetMode.Half;
                g.TextContrast       = 1;
                g.SmoothingMode      = SmoothingMode.None;
                g.CompositingQuality = CompositingQuality.HighQuality;
                g.InterpolationMode  = InterpolationMode.Default;
                using (var renderer = new SvgRendererWithNoSmoothControl(SvgRenderer.FromImage(bitmap)))
                {
                    renderer.SetBoundable(
                        new GenericBoundable(0.0f, 0.0f, bitmap.Width, bitmap.Height));
                    renderer.ScaleTransform(
                        bitmap.Width / dimensions.Width,
                        bitmap.Height / dimensions.Height,
                        MatrixOrder.Append);
                    svgDoc.Overflow = SvgOverflow.Auto;
                    svgDoc.RenderElement(renderer);
                }
            }

            return(bitmap);
        }
예제 #16
0
    public static void Save(Control?control, Size size, string path)
    {
        if (control is null)
        {
            return;
        }

        if (path.EndsWith("png", StringComparison.OrdinalIgnoreCase))
        {
            PngRenderer.Render(control, size, path);
        }

        if (path.EndsWith("svg", StringComparison.OrdinalIgnoreCase))
        {
            using var stream = File.Create(path);
            SvgRenderer.Render(control, size, stream);
        }

        if (path.EndsWith("pdf", StringComparison.OrdinalIgnoreCase))
        {
            using var stream = File.Create(path);
            PdfRenderer.Render(control, size, stream, 96);
        }

        if (path.EndsWith("xps", StringComparison.OrdinalIgnoreCase))
        {
            using var stream = File.Create(path);
            XpsRenderer.Render(control, size, stream, 96);
        }

        if (path.EndsWith("skp", StringComparison.OrdinalIgnoreCase))
        {
            using var stream = File.Create(path);
            SkpRenderer.Render(control, size, stream);
        }
    }
예제 #17
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="sourcePathList"></param>
 /// <param name="device"></param>
 protected override void Render(string[] sourcePathList, IDevice device)
 {
     SVGDocument[] docList = sourcePathList.Select <string, SVGDocument>(
         path => new SVGDocument(path))
                             .ToArray();
     try
     {
         using (SvgRenderer renderer = new SvgRenderer())
         {
             renderer.Render(device, docList);
         }
     }
     catch (Exception ex)
     {
         throw ex;
     }
     finally
     {
         foreach (var doc in docList)
         {
             doc.Dispose();
         }
     }
 }
예제 #18
0
파일: SvgFilter.cs 프로젝트: drewnoakes/SVG
 /// <summary>
 /// Renders the <see cref="SvgElement"/> and contents to the specified <see cref="SvgRenderer"/> object.
 /// </summary>
 /// <param name="renderer">The <see cref="SvgRenderer"/> object to render to.</param>
 protected override void Render(SvgRenderer renderer)
 {
     base.RenderChildren(renderer);
 }
예제 #19
0
    public async Task ProcessRequest()
    {
        var msg = $"{_context.Request.HttpMethod} {_context.Request.Url}";

        Console.WriteLine(msg);

        var url = _context.Request.RawUrl;

        if (url != null && url != "/" && url != "" && url != "/new" && url != "/close")
        {
            _context.Response.StatusCode = 401;
            _context.Response.Close();
            return;
        }

        var sb = new StringBuilder();

        sb.AppendLine("<html>");
        sb.AppendLine("<head>");
        sb.AppendLine("  <link rel=\"icon\" href=\"data:;base64,iVBORw0KGgo=\">");
        sb.AppendLine("</head>");
        sb.AppendLine("<body>");

        await Utilities.RunUiJob(() =>
        {
            var control = Repl.GetMainView();
            if (control is null)
            {
                return;
            }

            switch (url)
            {
            case "/new":
                (control.DataContext as ProjectEditorViewModel)?.OnNew(null);
                Dispatcher.UIThread.RunJobs();
                break;

            case "/close":
                (control.DataContext as ProjectEditorViewModel)?.OnCloseProject();
                Dispatcher.UIThread.RunJobs();
                break;
            }

            Console.WriteLine($"Rendering...");
            var sw = new Stopwatch();
            sw.Start();

            var size         = new Size(1366, 690);
            using var stream = new MemoryStream();
            SvgRenderer.Render(control, size, stream);
            stream.Position  = 0;
            using var reader = new StreamReader(stream);
            var svg          = reader.ReadToEnd();
            sb.AppendLine(svg);

            sw.Stop();
            Console.WriteLine($"Done in {sw.ElapsedMilliseconds}ms");
        });

        sb.AppendLine("</body></html>");

        var bytes = Encoding.UTF8.GetBytes(sb.ToString());

        _context.Response.ContentLength64 = bytes.Length;
        _context.Response.ContentType     = "text/html";
        _context.Response.StatusCode      = 200;
        _context.Response.OutputStream.Write(bytes, 0, bytes.Length);
        _context.Response.OutputStream.Close();
    }
 /// <summary>
 /// Renders the <see cref="SvgElement"/> and contents to the specified <see cref="SvgRenderer"/> object.
 /// </summary>
 /// <param name="renderer">The <see cref="SvgRenderer"/> object to render to.</param>
 protected override void Render(SvgRenderer renderer)
 {
     // Do nothing. Children should NOT be rendered.
 }
예제 #21
0
파일: SvgFilter.cs 프로젝트: DnevnikRu/SVG
        private void PopulateDefaults(SvgVisualElement element, SvgRenderer renderer)
        {
            this.ResetDefaults();

            this.Buffer.Add(SvgFilterPrimitive.SourceGraphic, this.CreateSourceGraphic);
            this.Buffer.Add(SvgFilterPrimitive.SourceAlpha, this.CreateSourceAlpha);
        }
예제 #22
0
파일: SvgFilter.cs 프로젝트: DnevnikRu/SVG
        private Bitmap CreateSourceGraphic(SvgVisualElement element, SvgRenderer renderer)
        {
            if (this.sourceGraphic == null)
            {
                RectangleF bounds = element.Path.GetBounds();
                this.sourceGraphic = new Bitmap((int)bounds.Width, (int)bounds.Height);

                using (var graphics = Graphics.FromImage(this.sourceGraphic))
                {
                    graphics.Clip = renderer.Clip;
                    graphics.Transform = renderer.Transform;

                    element.RenderElement(SvgRenderer.FromGraphics(graphics));

                    graphics.Save();
                }
            }

            return this.sourceGraphic;
        }
예제 #23
0
파일: SvgFilter.cs 프로젝트: DnevnikRu/SVG
        private Bitmap CreateSourceAlpha(SvgVisualElement element, SvgRenderer renderer)
        {
            if (this.sourceAlpha == null)
            {
                Bitmap source = this.Buffer[SvgFilterPrimitive.SourceGraphic](element, renderer);

                float[][] colorMatrixElements = {
                   new float[] {0, 0, 0, 0, 0},        // red
                   new float[] {0, 0, 0, 0, 0},        // green
                   new float[] {0, 0, 0, 0, 0},        // blue
                   new float[] {0, 0, 0, 1, 1},        // alpha
                   new float[] {0, 0, 0, 0, 0} };    // translations

                var matrix = new ColorMatrix(colorMatrixElements);

                ImageAttributes attributes = new ImageAttributes();
                attributes.SetColorMatrix(matrix);

                this.sourceAlpha = new Bitmap(source.Width, source.Height);

                using (var graphics = Graphics.FromImage(this.sourceAlpha))
                {

                    graphics.DrawImage(source, new Rectangle(0, 0, source.Width, source.Height), 0, 0,
                          source.Width, source.Height, GraphicsUnit.Pixel, attributes);
                    graphics.Save();
                }
            }

            return this.sourceAlpha;
        }
예제 #24
0
 /// <summary>
 /// Initializes a new instance of the <see cref="BarcodeWriterSvg"/> class.
 /// </summary>
 public BarcodeWriterSvg()
 {
     Renderer = new SvgRenderer();
 }
예제 #25
0
 /// <summary>
 /// Renders the <see cref="SvgElement"/> and contents to the specified <see cref="SvgRenderer"/> object.
 /// </summary>
 /// <param name="renderer">The <see cref="SvgRenderer"/> object to render to.</param>
 protected override void Render(SvgRenderer renderer)
 {
     // Do nothing
 }
예제 #26
0
파일: SvgFilter.cs 프로젝트: DnevnikRu/SVG
 /// <summary>
 /// Renders the <see cref="SvgElement"/> and contents to the specified <see cref="SvgRenderer"/> object.
 /// </summary>
 /// <param name="renderer">The <see cref="SvgRenderer"/> object to render to.</param>
 protected override void Render(SvgRenderer renderer)
 {
     // Do nothing
 }
예제 #27
0
        public static Bitmap CenterAndScale(Bitmap source, float width, float height, SvgRenderer svgRenderer)
        {
            float totalWidth  = source.Width;
            float totalHeight = source.Height;

            // Need to resize?
            if ((totalHeight != height || totalWidth != width))
            {
                // Figure out the ratio
                float ratioX = width / totalWidth;
                float ratioY = height / totalHeight;
                // use whichever multiplier is smaller
                float ratio = ratioX < ratioY ? ratioX : ratioY;

                // Calculate x,y
                float posX = (width - (totalWidth * ratio)) / 2.0f;
                float posY = (height - (totalHeight * ratio)) / 2.0f;

                Bitmap baseImage = new Bitmap((int)width, (int)height);

                Graphics g = Graphics.FromImage(baseImage);
                g.Clear(Color.White);
                g.DrawImage(source, posX, posY, (totalWidth * ratio), (totalHeight * ratio));

                return(baseImage);
            }

            return(source);
        }