通过边界坐标获取像素坐标

时间:2011-11-16 08:17:20

标签: c# image-processing bitmap picturebox pixels

我正在研究一个项目,我需要找到所选区域像素的坐标。我只需点击C#图片框即可获得此坐标。我需要找到图片中显示的灰色区域的像素坐标,以便更改此灰区域的颜色。在C#中有一个定义的方法吗?或请讨论如何存档。

代码示例将受到赞赏。

提前谢谢。

选定的坐标

Selected coordinates

必填区域

required area

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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。我不知道这会有多容易。