我尝试使用SkiaSharp将SVG图像转换为PNG,并返回一个带有图像的PdfSharp XImage对象,以便将其添加到PDF页面(因为PdfSharp不直接支持SVG格式)。
这是我的代码:
private XImage LoadSvgIcon(string iconUrl)
{
XElement root = XElement.Load(iconUrl);
using (Stream xmlStream = new MemoryStream())
{
root.Save(xmlStream);
xmlStream.Flush();
xmlStream.Position = 0;
var svg = new SkiaSharp.Extended.Svg.SKSvg();
svg.Load(xmlStream);
var bitmap = new SKBitmap((int)svg.CanvasSize.Width, (int)svg.CanvasSize.Height);
var canvas = new SKCanvas(bitmap);
var p = new SKPaint();
p.Color = SKColor.Parse("#219de1");
canvas.DrawPaint(p);
canvas.DrawPicture(svg.Picture);
using (var skData = SKImage.FromBitmap(bitmap).Encode(SKEncodedImageFormat.Png, 100))
{
Stream stream = new MemoryStream();
skData.SaveTo(stream);
return XImage.FromStream(stream);
}
}
}
即使我将画布的大小设置为SVG的大小,SVG也不会占用画布的整个空间(可以看到画布的背景是蓝色的,而SVG本身的背景是红色的,里面有图标-您可以看到它并没有占用整个画布空间)。
我错过了什么?
1条答案
按热度按时间cuxqih211#
可以尝试从弃用的
Extended.Svg
切换到Svg.Skia
nuget。你想缩放svg来填充所需的画布大小,这个过程实际上和缩放加载的位图来填充画布是一样的,有很多例子。只是一些代码,来说明这个想法: