如何使用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 目前不支持它,除非我自己顺利走路。
谢谢。
接收InvalidCastException
in 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.Registrar
1 [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.VisualElementRenderer
1 [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 中使用TouchTracking
nuget 包,但它与 .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
可以检测多个手指)及其坐标。
那么我如何实现TouchTracking
nuget包或某种可以实现上述要求的代码呢?