标签: skiasharp

如何使用Skia Sharp添加rect并将填充颜色和笔触颜色应用于该对象?

如何使用Skia Sharp添加rect或任何形状,并在iOS中将填充颜色和笔触颜色应用于该对象

uiview xamarin.ios skia ios skiasharp

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

如何在 Xamarin 上使用 SkiaSharp 绘制日语文本

现在我在 Xamarin Android 上使用 SkiaSharp。

我想用 SKCanvas.DrawText 绘制日语文本,但是日语字符是乱码。

我看到了这个 类似的问题,所以我尝试将文本转换为 UTF-8,但结果是一样的。

我试过如下。

var s = "abc???123???";
var buf = System.Text.Encoding.UTF8.GetBytes(s);
var utf8s = Encoding.UTF8.GetString(buf);
skcanvas.DrawText(utf8s, 50, 50, paint);
Run Code Online (Sandbox Code Playgroud)

另一个。

var s = "abc???123???";
var dest = Encoding.UTF8;
var src = Encoding.Default;
var buf = src.GetBytes(s);
var buf2 = Encoding.Convert(src,dest, buf);
var utf8s = dest.GetString(buf2);
skcanvas.DrawText(utf8s, 50, 50, paint);
Run Code Online (Sandbox Code Playgroud)

两者结果相同。“abc”和“123”画得很好,但是日文乱码。

任何的想法?

android xamarin skiasharp

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

在 Xamarin.Forms 上使用 SkiaSharp lib 绘制样条线(平滑路径)?

我正在使用 Xamarin 表单制作应用程序。

我想用 SKPath 绘制一条平滑的路径(样条线),但我无法找到一种简单的方法来实现这一点。

Skiasharp 目前不支持它,除非我自己顺利走路。

谢谢。

c# 2d xamarin xamarin.forms skiasharp

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

SkiaSharp无效的强制转换异常

接收InvalidCastExceptionin LoadApplication(new App());.我在PCL和Android中添加了SkiaSharp和SkiaSharp.Views.Forms.它还自动将SkiaSharp.Views包添加到Android项目中.

我删除了所有复杂的代码,并将此部分保留在我的XAML文件中

<ContentView 
    xmlns="http://xamarin.com/schemas/2014/forms" 
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
    xmlns:skia="clr-namespace:SkiaSharp.Views.Forms;assembly=SkiaSharp.Views.Forms"     
    x:Class="SkiaSharpRemote.MediaControlView">
    <ContentView.Content>
        <!--<skia:SKCanvasView
            x:Name="canvas"
            VerticalOptions="Fill"
            HorizontalOptions="Fill"
            PaintSurface="Canvas_PaintSurface">
        </skia:SKCanvasView>-->
    </ContentView.Content>
</ContentView>
Run Code Online (Sandbox Code Playgroud)

在我注释掉该skCanvasView行之后加载了该应用.如果我取消注释它,则抛出以下异常.

at(wrapper castclass)System.Object:__ castclass_with_cache(object,intptr,intptr)at Xamarin.Forms.Registrar 1[TRegistrable].GetHandler (System.Type type) [0x0001b] in C:\BuildAgent2\work\ca3766cfc22354a1\Xamarin.Forms.Core\Registrar.cs:24 at Xamarin.Forms.Registrar1 [TRegistrable] .GetHandler [TOut](System.Type type)[0x00000] in C:\ BuildAgent2\work\ca3766cfc22354a1\Xamarin.Forms.Core\Registrar.cs:29位于C:\ BuildAgent2\work\ca3766cfc22354a1\Xamarin.Forms.Platform中的Xamarin.Forms.Platform.Android.Platform.CreateRenderer(Xamarin.Forms.VisualElement元素)[0x00006] .Android\Platform.cs:288 at Xamarin.Forms.Platform.Android.VisualElementPackager.AddChild(Xamarin.Forms.VisualElement view,Xamarin.Forms.Platform.Android.IVisualElementRenderer oldRenderer,Xamarin.Forms.Platform.Android.RendererPool pool, System.Boolean sameChildren)[0x00023]在C:\ BuildAgent2\work\ca3766cfc22354a1\Xamarin.Forms.Platform.Android\VisualElementPackager.cs:74 at Xamarin.Forms.Platform.Android.VisualElementPackager.SetElement(Xamarin.Forms.VisualElement oldElement) ,Xamarin.Forms.VisualElement newElement)[0x00104]在C:\ BuildAgent2\work\ca3766cfc22354a1\Xamarin中 .Forms.Platform.Android\VisualElementPackager.cs:207,位于C:\ BuildAgent2\work\ca3766cfc22354a1\Xamarin.Forms.Platform.Android\VisualElementPackager.cs中的Xamarin.Forms.Platform.Android.VisualElementPackager.Load()[0x00000] :58,Xamarin.Forms.Platform.Android.VisualElementRenderer 1[TElement].SetPackager (Xamarin.Forms.Platform.Android.VisualElementPackager packager) [0x00007] in C:\BuildAgent2\work\ca3766cfc22354a1\Xamarin.Forms.Platform.Android\VisualElementRenderer.cs:337 at Xamarin.Forms.Platform.Android.VisualElementRenderer1 [TElement] .SetElement(TElement element)[0x00111]位于C:\ BuildAgent2\work\ca3766cfc22354a1\Xamarin.Forms.Platform.Android\VisualElementRenderer.cs:196 at Xamarin .Forms.Platform.Android.VisualElementRenderer 1[TElement].Xamarin.Forms.Platform.Android.IVisualElementRenderer.SetElement …

xamarin.android xamarin xamarin.forms skiasharp

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

Xamarin 表单上的 SkiaSharp 文本大小

文字大小比较

SKPaint 对象上的 TextSize 属性与“标准”Xamarin Forms FontSize 有何关联?

在图像中,您可以看到标签上的尺寸 40 与绘制的尺寸之间的差异。我需要做什么才能使它们大小相同?

xamarin xamarin.forms skiasharp

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

使用SkiaSharp调整大小时,iPhone图像方向错误

我在Xamarin.Forms项目中使用SkiaSharp中的SKBitmap.Resize()方法来调整图像大小以供显示.我遇到的问题是在iOS上拍照时,当照片以肖像拍摄时,图像会以正面朝上显示.在Android上拍照,从Android和iOS设备上的照片库导入可以保持方向,但在iOS上拍照不会.如果我没有使用SkiaSharp调整图像大小(仅显示图像而不调整大小),则图像将以正确的方向显示.然而,这不是解决方案,因为图像需要调整大小.以下是我的代码 -

private byte[] GetResizedImageData(string imageName)
    {
        float resizeFactor = 0.5f;
        var filePath = PathUtil.GetImagePath(imageName);
        var ogBitmap = SKBitmap.Decode(filePath);

        float fWidth = ogBitmap.Width * resizeFactor;
        int width = (int) Math.Round(fWidth);

        float fHeight = ogBitmap.Height * resizeFactor;
        int height = (int) Math.Round(fHeight);

        if (height >= 4096 || width >= 4096)
        {
            width = width * (int)resizeFactor;
            height = height * (int)resizeFactor;
        }

        var scaledBitmap = ogBitmap.Resize(new SKImageInfo( width, height), SKBitmapResizeMethod.Box);
        var image = SKImage.FromBitmap(scaledBitmap);
        var data = image.Encode(SKEncodedImageFormat.Jpeg, 100);

        return data.ToArray(); …
Run Code Online (Sandbox Code Playgroud)

image image-processing xamarin xamarin.forms skiasharp

3
推荐指数
2
解决办法
1044
查看次数

如何在 Windows.Forms 应用程序中呈现 SKBitmap?

嗨,我开始了一个新项目,WinForms 对我来说是新项目。我有一个 SKBitmap 对象,但我不知道如何渲染它。

winforms skia skiasharp

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

为什么 SkiaSharp Touch SKTouchAction.Moved 事件不起作用?

概括

触摸事件永远不会与 ActionType 一起引发SKTouchAction.Moved,但SKTouchAction.Pressed会引发。为什么.Moved事件永远不会被引发?

细节

我正在尝试在 SkiaSharp 中创建一个滑块。当用户触摸滑块或拖动时,此控件将需要更新拇指(可移动的小圆圈)。这是托管在 Xamarin Forms 应用程序中的,我创建了一个SKCanvasView来绘制滑块并响应触摸事件。

我已经成功响应了触摸事件,所以我知道它SKCanvasView正在接收一些 UI 事件,但SKTouchAction.Moved从未引发过。

示例代码

private SKCanvasView CreateSliderControl()
{
    var control = new SKCanvasView();
    control.PaintSurface += HandlePaintHeightControl;
    control.EnableTouchEvents = true;
    control.Touch += (sender, args) =>
    {
        var pt = args.Location;

        switch (args.ActionType)
        {
            case SKTouchAction.Pressed:
                // 1. This code gets hit whenever I touch the canvas
                control.InvalidateSurface();
                break;
            case SKTouchAction.Moved:
                // 2. This code never gets …
Run Code Online (Sandbox Code Playgroud)

touch xamarin xamarin.forms skiasharp

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

如何在 SKCanvasView 上实现双指缩放和滑动?

我正在使用 xamarin 表单开发图像查看器。我的源图像大小无限,比我的视口大得多。所以我使用 SKCanvasView 控件逐个绘制,以便我应该在图像中滑动。

我可以通过 SKCanvasView 上可用的 Touch 事件获得 Touch point。在这里,我能够检测到双击。滑动和平移。

我无法决定何时向上/向下滑动需要向上/向下移动多少图像?

最初,我尝试将 SKCanvasView 放在 ScrollView 控件的顶部,并使用滚动位置值绘制 SKCanvas。在这里滚动和打印工作完美。但是这里捏缩放不起作用,因为捏手势事件没有触发而是滚动。

xamarin.forms skiasharp

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

在 .NET MAUI 中实现 TouchTracking

我一直致力于将我们的应用程序从 Xamarin.Forms 迁移到 .NET MAUI。我们的应用程序几乎没有绘图功能,用户可以用手指进行绘图。我们在 Xamarin.Forms 中使用TouchTrackingnuget 包,但它与 .NET MAUI 不兼容。

以下是TouchTracking我们经常使用的软件包中的一些 API:

绘制页面.xaml

<Grid BackgroundColor="White">
   <skia:SKCanvasView x:Name="canvasView" PaintSurface="PaintingCanvasEnvent" />

   <Grid.Effects>
      <tt1:TouchEffect Capture="True" TouchAction="OnTouchEffectAction"/>
   </Grid.Effects>
</Grid>
Run Code Online (Sandbox Code Playgroud)

DrawPage.cs

void OnTouchEffectAction(object sender, TouchActionEventArgs args)
{
    SKPoint current = args.Location;
    
    switch (args.Type)
    {
        case TouchActionType.Pressed:
            //codes here ...
            break;

        case TouchActionType.Moved:
            //codes here
            break;

        case TouchActionType.Released:
            //codes here
            break;

        case TouchActionType.Cancelled:
            //codes here
            break;
    }
}
Run Code Online (Sandbox Code Playgroud)

在Xamarin.Forms中,该TouchTracking包允许我们检测触摸事件,并且我们可以获得所有触摸ID(因为TouchTracking可以检测多个手指)及其坐标。

那么我如何实现TouchTrackingnuget包或某种可以实现上述要求的代码呢?

c# xamarin.forms skiasharp maui .net-6.0

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