#.net #winforms #skiasharp
#.net #winforms #skiasharp
Вопрос:
Мне нужно прочитать SVG-файл и отобразить его на экране в моем приложении .net Windows Form. Я обнаружил, что сборки SkiaSharp могут обрабатывать файлы SVG, но я не нашел связи между классами SkiSharp и миром Windows.
Как я могу отобразить объект SkiaSharp (либо SKPicture, SKCanvas, либо любой другой подходящий) в графический объект .net Forms или, что лучше, в систему.Рисование.Изображение?
Если это невозможно, должен ли я отобразить в PNG-файл и прочитать его обратно? Или есть другая более подходящая сборка для моих требований?
Комментарии:
1. Вы можете использовать веб-браузерный элемент управления для отображения SVG. В этом случае вам не нужно будет добавлять стороннюю библиотеку. Я имею в виду, если вам это не нужно для чего-то другого.
2. Спасибо за подсказку, но это не мой подход.
Ответ №1:
Теперь я нашел способ сделать это:
SkiaSharp.Extended.Svg.SKSvg svg = new SkiaSharp.Extended.Svg.SKSvg();
svg.Load("Graphics.svg");
SKBitmap bitmap = new SKBitmap(100, 100); // 100x100 target size
var canvas = new SKCanvas(bitmap);
canvas.DrawPicture(svg.Picture);
using (var stream = new MemoryStream())
{
bitmap.Encode(stream, SKEncodedImageFormat.Png, 100);
stream.Seek(0, SeekOrigin.Begin);
var image = Image.FromStream(stream);
}
Затем у меня есть изображение, и я могу нарисовать его на своем экране.
Комментарии:
1. SKBitmap.Encode требует, чтобы первый параметр был SKWStream . Однако нет способа преобразовать MemoryStream в SKWStream. Мы не можем использовать SKWStream вместо этого, потому что Seek не существует в SKWStream, только MemoryStream.