Можно ли создать элемент Skia Canvas в приложении Avalonia? - PullRequest
0 голосов
/ 06 мая 2020

Я надеюсь перенести приложение Electron на avalonia. В настоящее время приложение использует Paper. js для рисования и управления взаимодействием со сложными многоугольниками. Заглянув в avalonia, я заметил, что он использует Skia, который, кажется, предлагает почти те же функции, что и Paper. js. Я надеялся, что будет простой способ создать «холст» Skia и просто напрямую использовать SkiaSharp api.

К сожалению, мне не очень повезло с поиском документации / ответов. Кто-то в gitter avalonia упомянул, что я мог бы использовать RenderTargetBitmap, но после изучения источника (не могу найти по нему никакой документации) я думаю, что было бы проще / элегантнее напрямую использовать холст Skia.

Is это возможно?

Спасибо!

1 Ответ

0 голосов
/ 06 мая 2020

У вас есть несколько вариантов:

  • Используйте WriteableBitmap: заблокируйте биты, создайте из него SKBitmap, создайте SKCanvas, начертите. Затем используйте этот WritableBitmap как Source для Image элемента управления. Это самый безопасный и переносимый, но, к сожалению, наименее производительный способ.
  • Доступ к базовому контексту Skia непосредственно в потоке рендеринга, вы можете найти пример здесь . Обратите внимание, что обратный вызов Render может быть вызван из любого потока, поэтому управляйте блокировками правильно. Также обратите внимание, что Avalonia имеет подключаемую архитектуру рендерера, поэтому технически не гарантируется, что рендерер будет Skia, даже если он в настоящее время используется по умолчанию на всех платформах и, скорее всего, останется основным рендерером.
  • После выхода 0.10 вы я смогу создать SKCanvas с аппаратным ускорением и отрендерить текстуру OpenGL. Инфраструктура, необходимая для использования текстур OpenGL в качестве изображений Avalonia, в настоящее время разрабатывается в управляющей ветви OpenGL
...