如何解决在不使用 PaintSurface 事件的情况下在 SkiaSharp 中绘制的最有效方法
此 question 的扩展。我正在使用 SkiaSharp
用 OpenGL
绘制形状。 WPF 的大多数代码示例都建议使用 SKElement
控件并获取对 PaintSurface
事件内的绘图表面的引用。我需要始终引用绘图表面,而不仅仅是在此事件内部,因此我使用 SKBitmap
和 SKCanvas
并将输出发送到 WPF 中的 Image
控件。
XAML
<Canvas x:Name="ScreenControl" />
CS
var bmp = new SKBitmap((int)ScreenControl.ActualWidth,(int)ScreenControl.ActualHeight);
var canvas = new SKCanvas(bmp);
var image = new Image
{
Stretch = Stretch.Fill
};
canvas.DrawText("Demo",new SKPoint(20,20),new SKPaint { TextSize = 20 });
var index = 0;
var clock = new Timer();
var wrt = bmp.ToWriteableBitmap();
image.source = wrt;
clock.Interval = 100;
clock.Elapsed += (object sender,ElapsedEventArgs e) =>
{
Application.Current.dispatcher.BeginInvoke(new Action(() =>
{
var wrt = bmp.ToWriteableBitmap(); // Potentially slow line #1
canvas.Clear();
canvas.DrawText((index++).ToString(),new SKPaint { TextSize = 20 });
image.source = wrt; // Potentially slow line #2
image.InvalidateVisual();
}));
};
clock.Start();
ScreenControl.Children.Clear();
ScreenControl.Children.Add(image);
项目
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net5.0-windows</TargetFramework>
<UseWPF>true</UseWPF>
</PropertyGroup>
<ItemGroup>
<packagereference Include="SkiaSharp.Views.WPF" Version="2.80.3-preview.18" />
</ItemGroup>
</Project>
问题
有没有一种方法可以更快地绘制,特别是无需重新创建位图 bmp.ToWriteableBitmap()
并且无需每次 image.source = wrt
都更改图像源?后台缓冲区或相关的东西?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。