【问题标题】:Get pixel coordinates through boundary coordinates通过边界坐标获取像素坐标
【发布时间】:2011-11-16 08:17:20
【问题描述】:

我正在做一个项目,我需要找到选定区域的像素坐标。我只需单击 C# 图片框即可获得此坐标。我需要找到如图所示的灰色区域的像素坐标,以改变这个灰区的颜色。 C# 中是否有定义的方法来执行此操作?或者请教如何存档。

代码示例将不胜感激。

提前致谢。

选定坐标

必填区域

【问题讨论】:

    标签: c# image-processing bitmap picturebox pixels


    【解决方案1】:

    您需要的是多边形内点算法 (http://en.wikipedia.org/wiki/Point_in_polygon)

    static bool PointInPolygon(Point p, Point[] poly)
    {
        Point p1, p2;
        bool inside = false;
    
        if (poly.Length < 3)
        {
            return inside;
        }
    
        Point oldPoint = new Point(poly[poly.Length - 1].X, poly[poly.Length - 1].Y);
    
        for (int i = 0; i < poly.Length; i++)
        {
            Point newPoint = new Point(poly[i].X, poly[i].Y);
    
            if (newPoint.X > oldPoint.X)
            {
                p1 = oldPoint;
                p2 = newPoint;
            }
            else
            {
                p1 = newPoint;
                p2 = oldPoint;
            }
    
            if ((newPoint.X < p.X) == (p.X <= oldPoint.X) 
                && ((long)p.Y - (long)p1.Y) * (long)(p2.X - p1.X) < ((long)p2.Y - (long)p1.Y) * (long)(p.X - p1.X))
            {
                inside = !inside;
            }
    
            oldPoint = newPoint;
        }
    
        return inside;
    }
    

    (来自http://www.gamedev.net/topic/533455-point-in-polygon-c-implementation/

    如果您使用System.Windows.Shapes.Polygon 来表示您的多边形,您也可以使用.Net HitTestCore Method。不过,我不知道这有多容易。

    【讨论】:

      【解决方案2】:

      使用 Click 事件,并从事件中拉出鼠标坐标。如果灰色区域是由函数定义的,您可以编写一个方法来检查它是否在指定的区域内。如果不是(它只是一个静态图像),你应该使用鼠标坐标来计算你点击了哪个像素,并检查它的颜色值。可能有一种方法可以获取鼠标单击的颜色值(但是,我可能将该方法与 OpenGL 中的 glReadPixel 方法混淆了)。

      【讨论】:

      • 我已经通过图片框无线获取像素,但问题在于找到形状的像素区域。
      • 这可能就是您要找的东西吗? support.microsoft.com/kb/892462
      猜你喜欢
      • 1970-01-01
      • 2019-06-27
      • 2021-01-05
      • 2021-02-19
      • 1970-01-01
      • 2018-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多