// Copyright © 2017-2025 QL-Win Contributors
//
// This file is part of QuickLook program.
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see .
#if USESVGSKIA
using QuickLook.Common.Helpers;
using QuickLook.Common.Plugin;
using SkiaSharp;
using Svg.Skia;
using System;
using System.IO;
using System.Threading.Tasks;
using System.Windows.Media.Imaging;
namespace QuickLook.Plugin.ImageViewer.AnimatedImage.Providers;
internal class SvgProvider : ImageMagickProvider
{
public SvgProvider(Uri path, MetaProvider meta, ContextObject contextObject) : base(path, meta, contextObject)
{
}
public override Task GetRenderedFrame(int index)
{
return new Task(() =>
{
try
{
using var svg = new SKSvg();
if (svg.Load(Path.LocalPath) is SKPicture picture)
{
using var ms = new MemoryStream();
// Render the SVG picture to a bitmap
picture.ToImage(ms, SKColors.Empty, SKEncodedImageFormat.Png, 100, 1f, 1f, SKColorType.Rgba8888, SKAlphaType.Unpremul, null);
return BitmapFrame.Create(ms, BitmapCreateOptions.None, BitmapCacheOption.OnLoad);
}
}
catch (Exception e)
{
ProcessHelper.WriteLog(e.ToString());
}
// Fallback to basic one
return base.GetRenderedFrame();
});
}
}
#endif