Skip to content

Commit

Permalink
Fix: svg-net#863 'SVG image is blurred when some sections have opacit…
Browse files Browse the repository at this point in the history
…y<>1' issue.
  • Loading branch information
H1Gdev committed Apr 11, 2021
1 parent 3daf279 commit d637da5
Showing 1 changed file with 13 additions and 2 deletions.
15 changes: 13 additions & 2 deletions Source/Basic Shapes/SvgVisualElement.cs
Original file line number Diff line number Diff line change
Expand Up @@ -150,24 +150,35 @@ private void RenderInternal(ISvgRenderer renderer, bool renderFilter)
IsPathDirty = true;

if (bounds.Width > 0f && bounds.Height > 0f)
using (var canvas = new Bitmap((int)Math.Ceiling(bounds.Width), (int)Math.Ceiling(bounds.Height)))
{
var scaleX = 1f;
var scaleY = 1f;
using (var transform = renderer.Transform)
{
scaleX = Math.Max(scaleX, Math.Abs(transform.Elements[0]));
scaleY = Math.Max(scaleX, Math.Abs(transform.Elements[3]));
}

using (var canvas = new Bitmap((int)Math.Ceiling(bounds.Width * scaleX), (int)Math.Ceiling(bounds.Height * scaleY)))
{
using (var canvasRenderer = SvgRenderer.FromImage(canvas))
{
canvasRenderer.SetBoundable(renderer.GetBoundable());
canvasRenderer.TranslateTransform(-bounds.X, -bounds.Y);
canvasRenderer.ScaleTransform(scaleX, scaleY);

if (Renderable)
RenderInternal(canvasRenderer, RenderFillAndStroke);
else
RenderChildren(canvasRenderer);
}
var srcRect = new RectangleF(0f, 0f, bounds.Width, bounds.Height);
var srcRect = new RectangleF(0f, 0f, bounds.Width * scaleX, bounds.Height * scaleY);
if (Renderable)
renderer.DrawImage(canvas, bounds, srcRect, GraphicsUnit.Pixel, opacity);
else
RenderInternal(renderer, r => r.DrawImage(canvas, bounds, srcRect, GraphicsUnit.Pixel, opacity));
}
}
}
}
}
Expand Down

0 comments on commit d637da5

Please sign in to comment.