C# convert SVG to System.Windows.Controls.Image via Svg

FredGrit發表於2024-11-22

1.Install SVG the third party software tool from nuget;

2.

using System;
using System.Collections.Generic;
using System.Drawing.Imaging;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace WpfApp40
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        int width, height;
        public MainWindow()
        {
            InitializeComponent();
            this.Loaded += MainWindow_Loaded;
        }

        private void MainWindow_Loaded(object sender, RoutedEventArgs e)
        {
            width = (int)this.ActualWidth;
            height = (int)this.ActualHeight;
            string svgFile = @"../../1.svg";
            System.Windows.Controls.Image img = new Image();
            img.Source = ConvertSvgToImageSource(svgFile);
            this.Content = img;
        }

        private ImageSource ConvertSvgToImageSource(string svgFile)
        {
            BitmapImage bmi = new BitmapImage();
            var svgDoc = Svg.SvgDocument.Open(svgFile);
            var bmp = svgDoc.Draw(width,height);
            using (MemoryStream ms = new MemoryStream())
            {
                bmp.Save(ms, ImageFormat.Png);
                ms.Position = 0;
                bmi.BeginInit();
                bmi.StreamSource = ms;
                bmi.CacheOption = BitmapCacheOption.OnLoad;
                bmi.EndInit();
                if(bmi.CanFreeze)
                {
                    bmi.Freeze();
                }
            }                
            return bmi;
        }
    }
}