如何使用Skia Sharp添加rect或任何形状,并在iOS中将填充颜色和笔触颜色应用于该对象
现在我在 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”画得很好,但是日文乱码。
任何的想法?
我正在使用 Xamarin 表单制作应用程序。
我想用 SKPath 绘制一条平滑的路径(样条线),但我无法找到一种简单的方法来实现这一点。
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.VisualElementRenderer1[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.VisualElementRenderer1[TElement].Xamarin.Forms.Platform.Android.IVisualElementRenderer.SetElement …
SKPaint 对象上的 TextSize 属性与“标准”Xamarin Forms FontSize 有何关联?
在图像中,您可以看到标签上的尺寸 40 与绘制的尺寸之间的差异。我需要做什么才能使它们大小相同?
我在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) 嗨,我开始了一个新项目,WinForms 对我来说是新项目。我有一个 SKBitmap 对象,但我不知道如何渲染它。
触摸事件永远不会与 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) 我正在使用 xamarin 表单开发图像查看器。我的源图像大小无限,比我的视口大得多。所以我使用 SKCanvasView 控件逐个绘制,以便我应该在图像中滑动。
我可以通过 SKCanvasView 上可用的 Touch 事件获得 Touch point。在这里,我能够检测到双击。滑动和平移。
我无法决定何时向上/向下滑动需要向上/向下移动多少图像?
最初,我尝试将 SKCanvasView 放在 ScrollView 控件的顶部,并使用滚动位置值绘制 SKCanvas。在这里滚动和打印工作完美。但是这里捏缩放不起作用,因为捏手势事件没有触发而是滚动。
我一直致力于将我们的应用程序从 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包或某种可以实现上述要求的代码呢?