SkiaSharp: как рисовать в .net Graphics

#.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.