【发布时间】:2011-11-16 08:17:20
【问题描述】:
我正在做一个项目,我需要找到选定区域的像素坐标。我只需单击 C# 图片框即可获得此坐标。我需要找到如图所示的灰色区域的像素坐标,以改变这个灰区的颜色。 C# 中是否有定义的方法来执行此操作?或者请教如何存档。
代码示例将不胜感激。
提前致谢。
选定坐标
必填区域
【问题讨论】:
标签: c# image-processing bitmap picturebox pixels
我正在做一个项目,我需要找到选定区域的像素坐标。我只需单击 C# 图片框即可获得此坐标。我需要找到如图所示的灰色区域的像素坐标,以改变这个灰区的颜色。 C# 中是否有定义的方法来执行此操作?或者请教如何存档。
代码示例将不胜感激。
提前致谢。
【问题讨论】:
标签: c# image-processing bitmap picturebox pixels
您需要的是多边形内点算法 (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。不过,我不知道这有多容易。
【讨论】:
使用 Click 事件,并从事件中拉出鼠标坐标。如果灰色区域是由函数定义的,您可以编写一个方法来检查它是否在指定的区域内。如果不是(它只是一个静态图像),你应该使用鼠标坐标来计算你点击了哪个像素,并检查它的颜色值。可能有一种方法可以获取鼠标单击的颜色值(但是,我可能将该方法与 OpenGL 中的 glReadPixel 方法混淆了)。
【讨论】: