xamarin.forms - 如何使用 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)结果:这是结果
解决方案
推荐阅读
- ansible - 使用循环的 set_fact 的 ansible 输出可能
- mysql - 尝试 GET 或 POST 数据到 mySQL 数据库时,LOOPBACK 中出现错误。我在这里缺少什么?
- git - 有没有办法将提交合并到 git 中 master 上的前一个点?
- c++ - C++ 中是否有内置的卡方 CDF 函数
- android - Android:相对布局将TextView设置在另一个textview下方并居中
- c - 检查一个数字在数组中出现的次数
- c# - WPF Datagrid AlternatingRowBackground
- html - 只想让关闭按钮溢出在模态框内可见
- php - 如何使用 fscanf 在 php 中读取一行数字
- javascript - Stripe 多计划订阅 API 调用的格式数组