是否可以在 Avalonia 应用程序中创建 Skia Canvas 元素?

Mat*_*art 2 skia skiasharp avaloniaui

我希望将 Electron 应用程序移植到 Avalonia。该应用程序目前使用 Paper.js 来绘制和管理与复杂多边形的交互。查看 Avalonia,我注意到它使用了 Skia,它似乎提供了与 Paper.js 相同的功能。我希望有一种简单的方法来创建 Skia“画布”,并且直接使用 SkiaSharp API。

不幸的是,我没有太多运气找到文档/答案。avalonia gitter 上有人提到我可能会使用 RenderTargetBitmap,但在查看源代码(找不到任何相关文档)后,我认为直接使用 Skia 画布会更容易/更优雅。

这可能吗?

kek*_*eks 5

您有多种选择:

  • 使用WriteableBitmap:锁定位,SKBitmap从中创建SKCanvas,创建,绘制。然后使用WritableBitmap作为Source用于Image控制。这是最安全最便携,但不幸的是性能最低的方式。
  • 直接在渲染线程上访问底层 Skia 上下文,您可以在此处找到示例。请注意,Render回调可能会从任何线程调用,因此请正确管理您的锁。另请注意,Avalonia 具有可插拔的渲染器架构,因此渲染器在技术上不能保证是 Skia,即使它目前在所有平台上默认使用并且很可能仍然是主要渲染器
  • 0.10 发布后,您将能够创建硬件加速的 SKCanvas 并渲染到 OpenGL 纹理。使用 OpenGL 纹理作为 Avalonia 图像所需的基础架构目前正在OpenGL 控制分支中进行