MemBitmap ParseAndRenderSvg(System.Text.StringBuilder svgContent) { //---------- //copy from HtmlRenderer's SvgViewer demo //---------- var docBuilder = new VgDocBuilder(); var parser = new SvgParser(docBuilder); TextSnapshot textSnapshot = new TextSnapshot(svgContent.ToString()); parser.ParseDocument(textSnapshot); VgVisualDocBuilder builder = new VgVisualDocBuilder(); VgVisualElement vgVisElem = builder.CreateVgVisualDoc(docBuilder.ResultDocument, _vgDocHost).VgRootElem; PixelFarm.CpuBlit.VertexProcessing.Q1RectD bounds = vgVisElem.GetRectBounds(); float actualXOffset = (float)-bounds.Left; float actualYOffset = (float)-bounds.Bottom; int bmpW = (int)Math.Round(bounds.Width); int bmpH = (int)Math.Round(bounds.Height); if (bmpW == 0 || bmpH == 0) { return(null); } MemBitmap memBitmap = new MemBitmap(bmpW, bmpH); using (Tools.BorrowAggPainter(memBitmap, out var p)) using (Tools.More.BorrowVgPaintArgs(p, out var paintArgs)) { float orgX = p.OriginX; float orgY = p.OriginY; p.SetOrigin(actualXOffset, actualYOffset); p.Clear(PixelFarm.Drawing.Color.White); p.FillColor = PixelFarm.Drawing.Color.Black; double prevStrokeW = p.StrokeWidth; vgVisElem.Paint(paintArgs); p.StrokeWidth = prevStrokeW; //restore p.SetOrigin(orgX, orgY); //restore } return(memBitmap); }
protected override void PaintImp(PaintVisitor p) { #if DEBUG p.dbugEnterNewContext(this, PaintVisitor.PaintVisitorContextName.Init); #endif Color bgColorHint = p.CurrentSolidBackgroundColorHint;//save p.CurrentSolidBackgroundColorHint = Color.Transparent; DrawBoard drawBoard = p.InnerDrawBoard; if (DisableBmpCache) { if (!(drawBoard.GetPainter() is PixelFarm.CpuBlit.AggPainter painter)) { return; } //TODO: review here //temp fix //painter.CurrentFont = new RequestFont("tahoma", 14); //var textPrinter = new PixelFarm.Drawing.Fonts.VxsTextPrinter(painter, s_openfontTextService); //painter.TextPrinter = textPrinter; //painter.Clear(Color.White); // double prevStrokeW = painter.StrokeWidth; //Color fillColor = painter.FillColor; //painter.StrokeWidth = 1;//default //painter.FillColor = Color.Black; using (Tools.More.BorrowVgPaintArgs(painter, out var paintArgs)) { if (_vgVisualElem.CoordTx != null) { } _vgVisualElem.Paint(paintArgs); } painter.StrokeWidth = prevStrokeW;//restore //painter.FillColor = fillColor;////restore return; } if (_vgVisualElem.HasBitmapSnapshot) { Image backimg = _vgVisualElem.BackingImage; drawBoard.DrawImage(backimg, new RectangleF(0, 0, backimg.Width, backimg.Height)); } else { PixelFarm.CpuBlit.VertexProcessing.Q1RectD bound = _vgVisualElem.GetRectBounds(); //create PixelFarm.CpuBlit.MemBitmap backimg = new PixelFarm.CpuBlit.MemBitmap((int)bound.Width + 10, (int)bound.Height + 10); #if DEBUG backimg._dbugNote = "cssBoxSvgRoot"; #endif PixelFarm.CpuBlit.AggPainter painter = PixelFarm.CpuBlit.AggPainter.Create(backimg); //TODO: review here //temp fix // double prevStrokeW = painter.StrokeWidth; using (Tools.More.BorrowVgPaintArgs(painter, out VgPaintArgs paintArgs)) { if (_vgVisualElem.CoordTx != null) { } _vgVisualElem.Paint(paintArgs); } painter.StrokeWidth = prevStrokeW;//restore //painter.FillColor = fillColor;////restore #if DEBUG //test //PixelFarm.CpuBlit.Imaging.PngImageWriter.dbugSaveToPngFile(backimg, "d:\\WImageTest\\subimg1.png"); #endif _vgVisualElem.SetBitmapSnapshot(backimg, true); drawBoard.DrawImage(backimg, new RectangleF(0, 0, backimg.Width, backimg.Height)); } p.CurrentSolidBackgroundColorHint = bgColorHint; }