标签: skiasharp

使用SkiaSharp在Xamarin中加载SVG文件

从1.55.0版开始,SkiaSharp支持读取SVG文件。该软件包已于几天前(2016年11月10日)发布,我找不到足够的文档来了解如何使用它。

需要以下软件包:SkiaSharp 1.55.0 SkiaSharp视图和图层1.55.0 SkiaSharp.Svg 1.55.0-beta1

第一个问题是在Xamarin.Android中加载SKSvg的最佳方法是什么?

svg android xamarin.android xamarin skiasharp

2
推荐指数
1
解决办法
2579
查看次数

Xamarin:如何获取光标/触摸坐标(位置 X 和 Y)?

介绍

我正在创建我的第一个 Xamarin 应用程序(首先针对 UWP,然后是 Android,最后可能是 iOS)。

基本上,应用程序应该检测多个手指,每个手指上都会出现圆圈并跟随它们。

我的应用

首先我认为 UI 和图形不能用 Xamarin 编码,所以我开始了 UWP 代码:

主页.xaml.cs

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices.WindowsRuntime;
using System.Windows.Input;
using Windows.Foundation.Collections;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;
using Windows.Devices.Input;
using Xamarin.Forms;
using Xamarin.Forms.Platform.UWP;
using Windows.UI.Input;
using Windows.UI.Xaml.Shapes;
using Windows.UI;

namespace App1.UWP
{
    public sealed partial class MainPage
    {
        public MainPage()
        {
            this.InitializeComponent();

            LoadApplication(new App1.App());
        }

        private async void OnPointerPressed(object sender, …
Run Code Online (Sandbox Code Playgroud)

c# xamarin xamarin.forms mr.gestures skiasharp

2
推荐指数
1
解决办法
8366
查看次数

如何使用 SkiaSharp.Views.UWP?

有人知道如何在 SkiaSharp.Views.UWP 命名空间中使用 SKXamlCanvas 吗?

我找到了有关 SkiaSharp.Views.Forms 和 SKCanvasView 的信息。

在官方网站上,我们有 https://developer.xamarin.com/api/namespace/SkiaSharp.Views.UWP/

但是 nuget 对 UWP 一无所知。Nuget 有仅用于表单的包。

c# uwp skiasharp

2
推荐指数
1
解决办法
1640
查看次数

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

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

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

这可能吗?

skia skiasharp avaloniaui

2
推荐指数
1
解决办法
1236
查看次数

SkiaSharp不会用StrokeAndFill填充三角形

我试图绘制并填充一个三角形。我提到了一个android系统-问题如何在android画布上绘制实心三角形并执行以下操作。它绘制三角形,但不填充它。如何填充它?另外,是否可以用不同于线条颜色的颜色填充它?

Xamarin形式

private void OnPainting(object sender, SKPaintSurfaceEventArgs e)
{
        var surface = e.Surface;
        var canvas = surface.Canvas;
        canvas.Clear(SKColors.White);


        var pathStroke2 = new SKPaint
        {
            IsAntialias = true,
            Style = SKPaintStyle.StrokeAndFill,
            Color = new SKColor(244, 0, 110, 200),
            StrokeWidth = 5
        };

        var path2 = new SKPath { FillType = SKPathFillType.EvenOdd };
        path2.MoveTo(0, 0);
        path2.LineTo(0, 140);
        path2.MoveTo(0, 140);
        path2.LineTo(140, 140);
        path2.MoveTo(140, 140);
        path2.LineTo(0, 0);
        path2.Close();
        canvas.DrawPath(path2, pathStroke2);

    }
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

skia xamarin xamarin.forms skiasharp

1
推荐指数
1
解决办法
1082
查看次数

如何使用 SkiaSharp 处理多点触控事件?Xamarin

Skiasharp 可以使用以下方法操作触摸事件:

private void OnTouch(object sender, SKTouchEventArgs args)
Run Code Online (Sandbox Code Playgroud)

通过这种方法,我只能处理一个触摸点坐标:

args.Location.X, args.Location.Y
Run Code Online (Sandbox Code Playgroud)

但如何检测多点触控事件呢?

例如,Android 本机 API 使您能够管理两个手指位置以检测多点触控。

如何使用 SkiaSharp 实现这一目标?

multi-touch xamarin xamarin.forms skiasharp

1
推荐指数
1
解决办法
1547
查看次数

如何在 Xamarin 表单上使用 SkiaSharp 加载 .svg 文件?

如何在 Xamarin Forms(Android 和 iOS)上.svg使用SkiaSharp加载文件。

我尝试使用 SkiaSharp 在 Xamarin 中加载 SVG 文件,但无法加载它。

我尝试使用SkiaSharp.Extended并参考他们的演示,但仍然无法加载它。

我做错了什么吗?

请帮我!

xamarin.ios xamarin.android xamarin xamarin.forms skiasharp

1
推荐指数
1
解决办法
7071
查看次数

SkiaSharp 剪切路径

我正在使用 System.Drawing 进行一些图像编辑,现在将所有内容移植到 SkiaSharp 以便在 Linux / .NET Core 上使用它。一切工作正常,除了我还没有找到一种以编程方式为图像提供圆角的方法。

我编写了一些代码,这些代码依赖于以圆形形式绘制路径,然后尝试将路径的外部着色为透明。但这不起作用,因为看起来有多个层,并且使上层的部分透明并不会使图像的整个区域(所有层)透明。这是我的代码:

public static SKBitmap MakeImageRound(SKBitmap image)
{
    SKBitmap finishedImage = new SKBitmap(image.Width, image.Height);

    using (SKCanvas canvas = new SKCanvas(finishedImage))
    {
       canvas.Clear(SKColors.Transparent);
       canvas.DrawBitmap(image, new SKPoint(0, 0));
       SKPath path = new SKPath();
       path.AddCircle(image.Width / 2, image.Height / 2, image.Width / 2 - 1f);
       path.FillType = SKPathFillType.InverseEvenOdd;
       path.Close();
       canvas.DrawPath(path, new SKPaint {Color = SKColors.Transparent, Style = SKPaintStyle.Fill });
       canvas.ResetMatrix();              
       return finishedImage;
    }
}
Run Code Online (Sandbox Code Playgroud)

如果这是错误的代码,我很抱歉,这是我第一次使用 C# 进行图像编辑,因此我也是 SkiaSharp 的绝对初学者。我修改了从这里获得的 System.Drawing 代码。

我还看了 …

.net c# .net-core skiasharp

1
推荐指数
1
解决办法
1517
查看次数

使用 SkiaSharp.SKBitmap 图像作为 Xamarin 中按钮的 ImageSource

我试图将SKBitmap图像用作/转换为ImageSource对象,以便在Button分配给其ImageSource属性的情况下使用上述图像,但是,在我的一生中,无法弄清楚如何将SKBitmap对象转换为ImageSource.

在网上搜索只产生了关于转换ImageSourceSKBitmap而不是相反的文章/问题。

提前致谢。

c# xamarin xamarin.forms skiasharp

1
推荐指数
2
解决办法
1848
查看次数

SkiaSharp 可以在 WPF 应用程序中使用吗?

我知道SkiaSharp可以将画布放置在GridXamarin 应用程序中。这是一些示例(工作)代码:

xmlns:skia="clr-namespace:SkiaSharp.Views.Forms;assembly=SkiaSharp.Views.Forms"
Run Code Online (Sandbox Code Playgroud)
<skia:SKCanvasView 
    x:Name="AUView"
    Grid.Row="2"
    PaintSurface="AUView_PaintSurface" />
Run Code Online (Sandbox Code Playgroud)

但是当我尝试在 WPF 应用程序中做类似的事情时:

xmlns:skia="clr-namespace:SkiaSharp;assembly=SkiaSharp"
Run Code Online (Sandbox Code Playgroud)
<skia:SKCanvas
   Name="AUView"
   Grid.Row="2"
   PaintSurface="AUView_PaintSurface" />
Run Code Online (Sandbox Code Playgroud)

我收到错误:

A value of type 'SKCanvas' cannot be added to a collection or dictionary of type 'UIElementCollection'.
Run Code Online (Sandbox Code Playgroud)

是否可以SKCanvas在 WPF 中的网格单元格中放置一个,或者整个页面都必须是一个SKCanvas

否则,如何/如何SkiaSharp在 WPF 中使用?

wpf skiasharp

1
推荐指数
1
解决办法
1767
查看次数

skiasharp xamarin 形式:缩放位图上的抗锯齿效果很差

我正在 Xamarin Forms 中使用 SkiaSharp 绘制位图。抗锯齿功能很差,我想知道如何改进它。

源位图具有抗锯齿功能,如所附图像的左侧所示。右半部分显示了 Android 设备上的屏幕截图的一部分。

源和显示的位图

在左侧,请注意锯齿是规则的 - 一点深色羽化向上,一点浅色羽化向下,全部均匀。在右侧部分,我们仍然看到羽化,但它在双宽像素和单宽像素之间交替。

绘制位图时

canvas.DrawBitmap(bmpSrc, rectSrcRight, rectDest, paint);
Run Code Online (Sandbox Code Playgroud)

我尝试将绘画 IsAntialiasing() 设置为 true 和 false。无显着差异。

在此示例中,源图像的高度为 61 像素,Android 图像的高度为 102。

我是不是期待太多了?

antialiasing xamarin.forms skiasharp

1
推荐指数
1
解决办法
1000
查看次数

如何从文件加载图像并将其绘制在 WPF Skiasharp 画布上?

SkiaSharp WPF <- 重要

在此输入图像描述

我想在 SkiaSharp 画布上的某个位置显示 Compass.png 图像。我已经在画布上绘制线条和圆圈,我不需要帮助。

private void MyCanvas_PaintSurface(object sender, SKPaintSurfaceEventArgs e)
{
  var surface = e.Surface;
  var canvas = surface.Canvas;
    
  canvas.Clear(SKColors.Black);
    
  // ... working drawing code drawing lines/circles already here
    
  // ** Need to add code here to load the compass image from the file and display it on the canvas at say (0, 0)?
}
Run Code Online (Sandbox Code Playgroud)

注:WPF。

wpf skiasharp

1
推荐指数
1
解决办法
2543
查看次数

Xamarin表单-异步任务“ EventHandler的签名(返回类型)与事件类型不匹配”

当我将Xamarin表单更新为3.2.0或更高版本时,出现以下错误:

Error       Position 68:29. Signature (return type) of EventHandler
"TimeToSport.Views.ItemsPage.OnCanvasViewPaintSurfaceAsync" doesn't match
the event type  TimeToSport 
E:\Xamarin Projects\TimeToSport_master\TimeToSport\TimeToSport\Views\Main\ItemsPage.xaml    68  
Run Code Online (Sandbox Code Playgroud)

错误来自以下代码(xaml):

<skia:SKCanvasView x:Name="canvas" 
 PaintSurface="OnCanvasViewPaintSurfaceAsync" 
 Grid.Row="2" 
/>
Run Code Online (Sandbox Code Playgroud)

在CS文件中:

SKCanvas canvas = surface.Canvas;
Run Code Online (Sandbox Code Playgroud)

当我使用Xamarin表单版本3.1.0时,我没有收到此错误,并且一切正常。但是,我必须为一些需要使用的新功能更新Xamarin表单。

如何解决此错误?

编辑:

OnCanvasViewPaintSurfaceAsync:

    async Task OnCanvasViewPaintSurfaceAsync(object sender, SKPaintSurfaceEventArgs args1)

    {
        args = args1;
        await drawGaugeAsync();

    }

public async Task drawGaugeAsync()
    {
        // Radial Gauge Constants
        int uPadding = 130;
        int side = 370;
        int radialGaugeWidth = 20;

        // Line TextSize inside Radial Gauge
        int lineSize1 = 220;
        int lineSize2 …
Run Code Online (Sandbox Code Playgroud)

c# xaml xamarin skiasharp

-1
推荐指数
1
解决办法
2260
查看次数