首页 > 解决方案 > 如何使用 Skiasharp 和 Google Cloud Vision 注释的边界多边形绘制位图?

问题描述

我正在尝试通过 Skiasharp 库(https://docs.microsoft.com/en-us/xamarin/xamarin-forms/user-interface/graphics/skiasharp/)在Google Cloud Vision 的注释周围绘制一个矩形高亮对象Xamarin 形式。我的代码目前如下所示:

        private SKBitmap HighlightWord(byte[] bytes, Google.Cloud.Vision.V1.EntityAnnotation entityAnnotation)
    {
        var ms = new MemoryStream(bytes);

        SKBitmap bitmap = SKBitmap.Decode(ms);
        var canvas = new SKCanvas(bitmap);

        SKPaint skPaint = new SKPaint { Color = new SkiaSharp.SKColor(255, 255, 0, 50) };
        SKPoint[] points = entityAnnotation.BoundingPoly.Vertices.Select((vertex) => new SKPoint(vertex.X, vertex.Y)).ToArray();
        canvas.DrawRect((points[0].X + points[1].X)/2, (points[1].Y + points[2].Y) / 2, points[1].X - points[0].X, points[3].Y - points[0].Y, skPaint);

        return bitmap;
    }

这段代码试图做的是将边界多边形顶点转换为 Skiasharp 点(它们确实返回看起来正确的坐标),然后使用这些顶点在注释周围绘制一个矩形。我相信 X 和 Y 坐标(参数的第一个)应该位于矩形的中心,所以我将矩形各个点的最小值和最大值相加并将其除以 2。然后我在减去矩形的边缘时将宽度和高度(最后两个参数)分配给该值。运行此代码后我遇到的问题是生成的矩形到处都是——它们的位置和大小都不正确。基于我从顶点数组获得的坐标:1(277,217); 2(407,219);3(407,244);4(277,244) 我可以推断出图中的哪一点,但从那里我真的只是猜测我应该使用这个库采取哪种方法,所以我的方法可能完全错误。如果您知道如何修复此代码,或者我可以在哪里找到一个类似的项目,从中我可以看到如何完成此操作,我真的很感谢您的帮助。编辑:扫描一:点 0(122,282);第 1 点(202,298);第 2 点(202,298);第 3 点(121,299)结果:这是结果

标签: xamarin.formsgoogle-cloud-visionskiasharp

解决方案


推荐阅读