【问题标题】:Numbering coordinates and drawstring from left to right从左到右编号坐标和拉绳
【发布时间】:2019-08-02 05:39:25
【问题描述】:

我正在尝试使用对象的矩形 COG 对 blob 进行编号。但是矩形是椭圆形的,因此我没有按正确的顺序得到它。

Font annotationFont = new Font("Verdana", 12, FontStyle.Bold);
Pen annotationPen = new Pen(Color.FromName("White"), 2.5f);

Graphics g = imageBoxMain.CreateGraphics();
for (int i = 0; i < totalrectcount; i++)
{
    Rectangle rect = new Rectangle(arrayX[i] /* blobid[i].name.Length * 6)*/, imageBoxMain.Image.Height - arrayminY[i]- 6, 100, 20);

    g.DrawString(Convert.ToString(i + 1), annotationFont, annotationPen.Brush, new System.Drawing.Point(rect.X, rect.Y));
}

这就是我得到的:

我希望从左到右标记矩形。

【问题讨论】:

    标签: c# arrays .net emgucv drawrectangle


    【解决方案1】:

    所以你有两个数组,一个用于 X,一个用于 Y?

    //far left is number 1, far right is 2, middle is 3
    var arrayX = new[] { 100, 300, 200 };
    var arrayY = new[] { 100, 95, 130 };
    

    那会很痛苦;首先将它们转换为 Point 的单个数组,然后对它们进行排序,然后绘制它们:

    var points = new Point[arrayX.Length];
    for(int x = 0; x<points.Length; x++){
      points[x] = new Point(arrayX[x], arrayY[x]);
    }
    
    foreach(Point r in points.OrderBy(p=>p.X)){
      Rectangle rect = new Rectangle(r.X /* blobid[i].name.Length * 6)*/, imageBoxMain.Image.Height - r.Y - 6, 100, 20);
      g.DrawString(Convert.ToString(i + 1), annotationFont, annotationPen.Brush, new System.Drawing.Point(rect.X, rect.Y));
    }
    

    【讨论】:

    • 我试过这个,如果我按照你所说的那样按 X 订购它。但仅当有一排矩形时。如果有 3 行,则从上到下排序。如果我按 Y 订购,则会发生与我原来的问题相同的情况。
    • 在我发布我的答案时,您并没有说有多行矩形。如果您需要专门的帮助,您将不得不显示您的数组内容。它可能看起来像points.OrderBy(p=&gt;(int)(p.Y+5)/100).ThenBy(p=&gt;p.X) - 这会将您在 Y 值 (100,95,130,200,195,230) 中的所有细微变化转换为简单编号的行 (1,1,1,2,2,2),它们按 y 排序,然后按 x ,然后按从左到右从上到下的顺序绘制矩形
    • my arrayX[x], arrayY[x] 具有您在图像中看到的绿色矩形的 X 和 Y 坐标。我从 aforge 的 blob rectangle 方法中获取这些坐标。
    • 我注意到你说“如果有 3 行”但你的问题图片只包含两个。请将此作为对 SO 的学习经验;我们只能使用您告诉我们的信息来回答问题,如果您不预先提供所有信息,那么如果您不断更改问题并指出他们回答的原因,那么试图帮助您的人会非常厌烦您的旧问题不适合您的新问题。很高兴我能帮助你!如果您发现数字跳到不同的 Y 行,您可能需要稍微调整 5 和 100 的值
    • 5 负责盒子的轻微上下变化,100 是线的高度(例如盒子 1 和盒子 4 的 Y 之间的像素差)而不是高度盒子。我没有测量你的图像 - 我真的需要查看你的数组来推荐合适的值
    猜你喜欢
    • 2014-08-23
    • 2015-06-20
    • 2014-01-07
    • 2022-01-18
    • 1970-01-01
    • 2020-11-11
    • 2014-06-26
    • 1970-01-01
    • 2018-12-29
    相关资源
    最近更新 更多