从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的最佳方法是什么?
我正在创建我的第一个 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) 有人知道如何在 SkiaSharp.Views.UWP 命名空间中使用 SKXamlCanvas 吗?
我找到了有关 SkiaSharp.Views.Forms 和 SKCanvasView 的信息。
在官方网站上,我们有 https://developer.xamarin.com/api/namespace/SkiaSharp.Views.UWP/
但是 nuget 对 UWP 一无所知。Nuget 有仅用于表单的包。
我希望将 Electron 应用程序移植到 Avalonia。该应用程序目前使用 Paper.js 来绘制和管理与复杂多边形的交互。查看 Avalonia,我注意到它使用了 Skia,它似乎提供了与 Paper.js 相同的功能。我希望有一种简单的方法来创建 Skia“画布”,并且直接使用 SkiaSharp API。
不幸的是,我没有太多运气找到文档/答案。avalonia gitter 上有人提到我可能会使用 RenderTargetBitmap,但在查看源代码(找不到任何相关文档)后,我认为直接使用 Skia 画布会更容易/更优雅。
这可能吗?
我试图绘制并填充一个三角形。我提到了一个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)
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 实现这一目标?
如何在 Xamarin Forms(Android 和 iOS)上.svg
使用SkiaSharp加载文件。
我尝试使用 SkiaSharp 在 Xamarin 中加载 SVG 文件,但无法加载它。
我尝试使用SkiaSharp.Extended并参考他们的演示,但仍然无法加载它。
我做错了什么吗?
请帮我!
我正在使用 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 代码。
我还看了 …
我试图将SKBitmap
图像用作/转换为ImageSource
对象,以便在Button
分配给其ImageSource
属性的情况下使用上述图像,但是,在我的一生中,无法弄清楚如何将SKBitmap
对象转换为ImageSource
.
在网上搜索只产生了关于转换ImageSource
为SKBitmap
而不是相反的文章/问题。
提前致谢。
我知道SkiaSharp
可以将画布放置在Grid
Xamarin 应用程序中。这是一些示例(工作)代码:
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 中使用?
我正在 Xamarin Forms 中使用 SkiaSharp 绘制位图。抗锯齿功能很差,我想知道如何改进它。
源位图具有抗锯齿功能,如所附图像的左侧所示。右半部分显示了 Android 设备上的屏幕截图的一部分。
在左侧,请注意锯齿是规则的 - 一点深色羽化向上,一点浅色羽化向下,全部均匀。在右侧部分,我们仍然看到羽化,但它在双宽像素和单宽像素之间交替。
绘制位图时
canvas.DrawBitmap(bmpSrc, rectSrcRight, rectDest, paint);
Run Code Online (Sandbox Code Playgroud)
我尝试将绘画 IsAntialiasing() 设置为 true 和 false。无显着差异。
在此示例中,源图像的高度为 61 像素,Android 图像的高度为 102。
我是不是期待太多了?
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。
当我将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) skiasharp ×13
xamarin ×7
c# ×5
skia ×2
wpf ×2
.net ×1
.net-core ×1
android ×1
antialiasing ×1
avaloniaui ×1
mr.gestures ×1
multi-touch ×1
svg ×1
uwp ×1
xamarin.ios ×1
xaml ×1