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

Skiasharp 是否可以在Avalonia应用程序中创建Skia画布元素?,skiasharp,skia,avaloniaui,Skiasharp,Skia,Avaloniaui,我希望将一个电子应用程序移植到Avalonia。该应用程序目前使用Paper.js绘制和管理与复杂多边形的交互。查看Avalonia,我注意到它使用了Skia,它似乎提供了与Paper.js几乎相同的功能。我希望有一种简单的方法来创建Skia“画布”,直接使用SkiaSharep API 不幸的是,我没有太多的运气找到文档/答案。avalonia gitter上有人提到我可能会使用RenderTargetBitmap,但在查看源代码(找不到任何文档)后,我认为直接使用Skia画布会更容易/更优雅

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

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


这可能吗?

您有几种选择:

  • 使用
    WriteableBitmap
    :锁定位,从中创建
    SKBitmap
    ,创建
    SKCanvas
    ,绘制。然后将该可写位图用作
    图像
    控件的
    。这是最安全、最便携,但不幸的是性能最差的方式
  • 直接在渲染线程上访问底层Skia上下文,可以找到一个示例。请注意,
    Render
    回调可能会从任何线程调用,因此请正确管理锁。还要注意的是,Avalonia具有可插拔的渲染器体系结构,因此从技术上讲,渲染器不能保证是Skia,即使它目前默认用于所有平台,并且很可能仍然是主要渲染器
  • 一旦退出0.10,您将能够创建硬件加速的SKCanvas并渲染到OpenGL纹理。将OpenGL纹理用作Avalonia图像所需的基础设施目前正在开发中

还有其他方法吗?我的意思是除了直接使用Skia。是否有允许绘制任意多边形的avalonia控件?canvas控件看起来可能会起作用,但我觉得它更像是一个布局工具(毕竟它是一个
面板
),而不是一个绘图工具(比如html画布)。如果
StreamGeometry
满足您的需要,您可以覆盖
OnRender
并使用
DrawingContext