我正在尝试用 SkiaSharp 替换 GDI+,作为数据可视化框架,该框架使用实时不断变化的工程数据呈现多层可平移可缩放图形。
在 GDI+ 中,应用程序执行了以下操作:
直到最终图像呈现的所有事情都是在一个或多个后台线程中完成的。 GUI 线程仅涉及将完成的图像绘制到 PictureBox 中。这很重要,因为还有许多其他 GUI 控件需要保持响应能力。这非常有效,只不过它是基于 CPU 的。小窗口没问题,但在 4K 屏幕上最大化会减慢渲染速度,导致程序几乎无法使用。
我想用 GPU 加速的 SkiaSharp 重新创建这个概念。
我尝试创建数十个不同的测试程序,但不断出现跨线程访问冲突,或者屏幕上没有显示任何内容,或者严重崩溃。让我问一些基本问题,而不是发布代码:
问题:
任何定义方法和注意事项的帮助将不胜感激!
在 Linux 上将 SkiaSharp 1.68.0 与 .NET Core 2.2 结合使用,并在尝试在 jpeg-memory-stream 上使用 Decode 时出现此错误(相同的代码适用于 Windows):
System.TypeInitializationException: The type initializer for 'SkiaSharp.SKAbstractManagedStream' threw an exception. ---> System.DllNotFoundException: Unable to load shared library 'libSkiaSharp' or one of its dependencies. In order to help diagnose loading problems, consider setting the LD_DEBUG environment variable: liblibSkiaSharp: cannot open shared object file: No such file or directory
at SkiaSharp.SkiaApi.sk_managedstream_set_delegates(IntPtr pRead, IntPtr pPeek, IntPtr pIsAtEnd, IntPtr pHasPosition, IntPtr pHasLength, IntPtr pRewind, IntPtr pGetPosition, IntPtr pSeek, IntPtr pMove, …
Run Code Online (Sandbox Code Playgroud) 我有个问题。我有一个带有一些位图的skiasharp画布。现在我想将带有位图的画布导出到图像,但我不知道如何做到这一点,或者是否可能。
有人能帮我吗?
我正在使用SkiaSharp将标签打印到PDF(和其他东西).PDF的每个页面都可以有多个行和列.我需要将每个标签剪裁成正确的尺寸,这样它就不会丢弃相邻的标签.
为了进行测试,每个标签都有一个延伸得太远的矩形加上7行文字和一个靠近垂直中间的圆圈.
我的代码是这样的:
using (var region = new SKRegion())
{
region.SetRect(_labelClipRect);
_currentCanvas.ClipRegion(region, SKClipOperation.Intersect);
_labelView.Draw(_currentCanvas, _printRequest.Device.DPI, xOffsetPX, yOffsetPX);
}
Run Code Online (Sandbox Code Playgroud)
结果是:
每页上的第一个标签看起来都是正确的,但其余的都很时髦.缺少矩形和圆形,文本根本没有剪裁.
有人见过这样的样品吗?
谢谢
我正在玩新版本的SkiaSharp(1.55),它支持在Xamarin.Android(而不仅仅是)上加载SVG.由于它是在不到10天前发布的事实,我找不到这么多文档.
加载黑白SVG后,我想将它着色(将前景填充颜色从黑色改为我需要的任何颜色).这就是我正在做的事情.
using (var paint = new SKPaint())
{
paint.ColorFilter = SKColorFilter.CreateLighting(SKColors.White, SKColor.Parse("#FF0000"));
}
Run Code Online (Sandbox Code Playgroud)
上面的代码工作正常,但我的印象是我没有使用正确的过滤器.
欢迎详细解释.
我的应用程序主屏幕通过SKCanvasView呈现.颜色准确反映了我在代码中指定的值.
如果我交换SKGLView(硬件加速版),不更改其他代码,结果是60%更暗:
<!--<skia:SKCanvasView PaintSurface="OnCanvasViewPaintSurface" />-->
<skia:SKGLView PaintSurface="OnCanvasViewPaintSurface" />
Run Code Online (Sandbox Code Playgroud)
为什么会发生这种情况,我该如何解决?
尝试渲染中文(或其他符号)文本时.SkiSharp将渲染框而不是正确的中文字符.显然,Skia默认使用的字体不支持这些字符.所以我们必须使用支持这些字符的字体来分配我们自己的SKTypeface.
我最初的策略是简单地包含必要的字体来渲染这些字符,这些字符工作正常.但是,当使用自己的字体支持多种不同的符号语言时,应用程序的大小会急剧增加(每个字体大约15 MB).
所以考虑一下这个...默认平台字体似乎支持这些符号字符中的任何一个就好了.我的意思是,默认情况下使用的字体完美呈现按钮,标签和标题.
所以我目前的想法是,为什么我不能只是通过,任何字体进入我的控制SKTypeface?
问题是,我不知道如何获得任何后备或默认字体,以便用它创建一个新的SKTypeface.
我的问题
如何使用渲染这些按钮,标签和标题的相同字体创建SKTypeface?
注意:如果你需要任何东西,从我来帮助你理解问题或解决问题只是让我知道.
我需要创建一个简单的应用程序来将图形网络绘制到画布上。当我使用 .net core 时,最好的解决方案之一似乎是 Avalonia + Skia 后端。问题是我还没有找到任何好的文档或示例来说明它。
如何使用 Avalonia 和 Skia 渲染后端渲染一组 primites?
我有一些现有的 C# 代码,用于System.Drawing.Common
测量字符串的近似宽度(以像素为单位):
var text = "abc123 this is some long text my dog's name is fido.";
using (var bitmap = new Bitmap(500, 50))
using (var graphics = Graphics.FromImage(bitmap))
{
// Size: 9 Points
using var font = new System.Drawing.Font(familyName: "Times New Roman", emSize: 9f);
var ms = graphics.MeasureString(text, font);
// Output: 'abc123 this is some long text my dog's name is fido.' via System.Drawing: 394.00195 x 22.183594
Console.WriteLine($"'{text}' via System.Drawing: {ms.Width} x {ms.Height}");
}
Run Code Online (Sandbox Code Playgroud)
升级到 后.NET …
如何在skiashark笔划上创建一个onclick函数?我创建了一个包含多个路径的圆形图:
https://i.stack.imgur.com/ngiz6.jpg
例如绿线:
SKPaint paint4 = new SKPaint
{
Style = SKPaintStyle.Stroke,
IsAntialias = true,
Color = Color.FromHex("#5bd363").ToSKColor(), // Overlay Colour of Radial Gauge
StrokeWidth = progressUtils.getFactoredWidth(radialGaugeWidth + 15), // Overlay Width of Radial Gauge
StrokeCap = SKStrokeCap.Butt // Round Corners for Radial Gauge
};
SKPath path4 = new SKPath();
path4.AddArc(rect, (360 / 24) * 9.25f + 90, (float)sweepAngleSlider3.Value);
canvas.DrawPath(path4, paint4)
Run Code Online (Sandbox Code Playgroud)
我如何做到这一点,当你点击一个笔画,例如绿色笔画时,会发生什么?
skiasharp ×10
xamarin ×4
c# ×3
.net-core ×2
.net-6.0 ×1
android ×1
avaloniaui ×1
fonts ×1
gpu ×1
imagesharp ×1
macos ×1
opentk ×1
skia ×1
svg ×1
xamarin.ios ×1