Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xamarin.forms 如何使用Skiasharp和Google Cloud Vision注解绘制位图';什么是边界多边形?_Xamarin.forms_Google Cloud Vision_Skiasharp - Fatal编程技术网

Xamarin.forms 如何使用Skiasharp和Google Cloud Vision注解绘制位图';什么是边界多边形?

Xamarin.forms 如何使用Skiasharp和Google Cloud Vision注解绘制位图';什么是边界多边形?,xamarin.forms,google-cloud-vision,skiasharp,Xamarin.forms,Google Cloud Vision,Skiasharp,我试图通过Xamarin表单中的Skiasharp库()在Google Cloud Vision的注释周围绘制一个矩形高亮对象。我的代码当前如下所示: private SKBitmap HighlightWord(byte[] bytes, Google.Cloud.Vision.V1.EntityAnnotation entityAnnotation) { var ms = new MemoryStream(bytes); SKBitm

我试图通过Xamarin表单中的Skiasharp库()在Google Cloud Vision的注释周围绘制一个矩形高亮对象。我的代码当前如下所示:

        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坐标(第一个参数)应该在矩形的中心,所以我将矩形各点的最小值和最大值相加,然后将其除以二。然后,在减去矩形的边时,我将宽度和高度(最后两个参数)指定给该值运行此代码后遇到的问题是,生成的矩形到处都是-它们的位置和大小都不正确。基于我从顶点数组获得的坐标:1(277217);2(407,219); 3(407,244); 4(277244)我可以推断出图中的哪一点是哪一点,但从那以后,我真的只是猜测使用这个库应该采取哪种方法,所以我的方法可能是完全错误的。如果您知道如何修复此代码,或者我可以在哪里找到类似的项目,从中我可以看到如何完成此任务,我将非常感谢您的帮助。 编辑: 扫描一: 第0点(122282);第1点(202298);第2点(202298);第3点(121299)
结果:

首先,您确定Google和Skia使用的坐标系匹配吗?这是一种问题,首先使用铅笔和一些图表纸可能是一个好主意。你好,杰森,再次感谢你的回复。我已经测试过它们好几次了,因为我还假设它们是错误的来源。我尝试通过使用以下参数(10,10300100)创建一个简单的rectange来检查它们是否有故障,并且它似乎也是反向的。我的意思是,由于某种原因,矩形的宽度应该是它的高度,反之亦然。我交换了它们的值,现在大小看起来是正确的,但位置仍然是关闭的。你能发布你正在传递给谷歌的样本图像和它返回的坐标吗?我刚刚编辑了帖子以包含这些信息。请注意,我也交换了X和Y坐标的位置,结果有点接近预期。这是你发送给谷歌的实际图像?或者这是显示图像的屏幕图片?如果是第二种情况,那就没用了。谷歌应该在这张图片中识别什么?