public void BeginRenderOptimize()
For more information, refer to SVG Rendering.
SvgDocument will create internal data structures to speed up rendering. This data can be cached and re-used by using SvgDocument.BeginRenderOptimize and SvgDocument.EndRenderOptimize.
If the SvgDocument will be rendered once, it is nest to leave the optimization as is. However, if the document will be rendered many times (for example, if it is being viewed in an Leadtools.Controls.ImageViewer control, then it is best to cache this data to enhance speed. This can easily be achieved by using BeginRenderOptimize before setting the document in the viewer.
BeginRenderOptimize can use extra system resources stored in the internal data. Use EndRenderOptimize to manually free this data at any time.
BeginRenderOptimize and EndRenderOptimize use an internal counter to track the state of the optimization. BeginRenderOptimize increments this counter and EndRenderOptimize decrements it: therefore, the optimization is only performed when needed and any number of BeginRenderOptimize and EndRenderOptimize operations can be chained together without affecting the document.
This internal data will be freed automatically when the document is disposed of, regardless of the value of the counter.
To determine whether the document has optimized rendering data, use SvgDocument.IsRenderOptimized.
using Leadtools;
using Leadtools.Codecs;
using Leadtools.Drawing;
using Leadtools.Forms.DocumentWriters;
using Leadtools.Svg;
using Leadtools.Document.Writer;
public void SvgDocumentRenderExample()
{
// Create a form with a picture box
Form form = new Form();
PictureBox pictureBox = new PictureBox();
pictureBox.Dock = DockStyle.Fill;
form.Controls.Add(pictureBox);
SvgDocument document = null;
// Load a page from a document file as SVG
string srcFileName = Path.Combine(LEAD_VARS.ImagesDir, "Leadtools.pdf");
using (var codecs = new RasterCodecs())
{
// Set 300 as the default value for loading document files
codecs.Options.RasterizeDocument.Load.Resolution = 300;
document = codecs.LoadSvg(srcFileName, 1, null) as SvgDocument;
}
// Make sure the document is valid for rendering
if (!document.IsFlat)
document.Flat(null);
if (!document.Bounds.IsValid)
document.CalculateBounds(false);
// Optimize it for rendering to increase the speed
document.BeginRenderOptimize();
Console.WriteLine("IsRenderOptimized is " + document.IsRenderOptimized);
// This is our paint code
pictureBox.Paint += (sender, e) =>
{
Graphics graphics = e.Graphics;
// We will fit and center this SVG document in the client area of the picture box
Rectangle dstBounds = pictureBox.ClientRectangle;
if (dstBounds.Width < 1 || dstBounds.Height < 1)
return;
// Create the transformation matrix
LeadMatrix transform = LeadMatrix.Identity;
LeadRectD srcBounds = document.Bounds.Bounds;
// Calculate the zoom so we can fit
double zoom = 1.0;
if (dstBounds.Width > dstBounds.Height)
{
zoom = dstBounds.Width / srcBounds.Width;
if ((zoom * srcBounds.Height) > dstBounds.Height)
zoom = dstBounds.Height / srcBounds.Height;
}
else
{
zoom = dstBounds.Height / srcBounds.Height;
if ((zoom * srcBounds.Width) > dstBounds.Width)
zoom = dstBounds.Width / srcBounds.Width;
}
// We have the zoom factor, set it in the transform
transform.Scale(zoom, zoom);
// Center
double xOffset = (dstBounds.Width - (zoom * srcBounds.Width)) / 2.0;
double yOffset = (dstBounds.Height - (zoom * srcBounds.Height)) / 2.0;
transform.Translate(xOffset, yOffset);
// Now setup the rendering options
SvgRenderOptions options = new SvgRenderOptions();
// Use our transform
options.Transform = transform;
// clipping (if any)
options.ClipBounds = LeadRectD.Create(e.ClipRectangle.X, e.ClipRectangle.Y, e.ClipRectangle.Width, e.ClipRectangle.Height);
// Fill the background with a white color
options.UseBackgroundColor = true;
options.BackgroundColor = RasterColor.FromKnownColor(RasterKnownColor.White);
options.Bounds = srcBounds;
// Create a rendering engine
using (var engine = RenderingEngineFactory.Create(graphics))
{
// Render the document
document.Render(engine, options);
}
};
form.SizeChanged += (sender, e) => pictureBox.Invalidate();
form.ShowDialog();
document.Dispose();
}
static class LEAD_VARS
{
public const string ImagesDir = @"C:\LEADTOOLS23\Resources\Images";
}