我需要像素化/从封闭的2D多边形获得点。不勾勒,但用“像素”体素填充,以检索它们的位置作为点。 现在我有用于线栅格的C#代码,有没有类似于多边形的方法?Bresenhams多边形C#
0
A
回答
0
只需使用DrawLine()
绘制一个多边形。没有绘制多边形的具体算法。
void DrawPoly(IEnumerable<Point> points)
{
endpoints = points.Skip(1).Concat(new []{points.First()});
pairs = points.Zip(endpoints, Tuple.Create);
for(var pair in pairs)
{
DrawLine(pair.Item1, pair.Item2);
}
}
void DrawLine(Point p1, Point p2)
{
// Your Bresenham code here
}
据编辑,你要填充的多边形。如果您想手动执行此操作,请尝试使用these之一。
听起来好像你想要一个包含多边形的所有坐标的大列表。有可能有更好的方法来解决潜在的问题。但是,您有两种选择:
- 在绘制每个点时存储它。这要求您重写上述算法。
使用现有库绘制多边形。然后,把得到的图像和附加坐标图像矩阵,它压扁成一维列表,然后过滤掉非黑值:
/* (0,0), (0,1), ..., (w,h) */ grid = Enumerable.Range(0, width) .SelectMany(x => Enumerable.Range(0, height) .Select(y => new Point(x, y))); flattened = image.SelectMany(p => p) .Zip(grid, (a,b) => new {PixelValue = a, Coordinate = b}); filledPoints = flattened.Where(p => p.PixelValue == 0) .Select(p => p.Coordinate);
0
如何我这件事情与矩阵连接存储填充像素?
public static List<Tuple<int, int>> PixelizePolygon(PaintEventArgs e)
{
List<Tuple<int,int>> pixels = new List<Tuple<int, int>>();
// Create solid brush.
SolidBrush blueBrush = new SolidBrush(Color.Blue);
// Create points that define polygon.
PointF point1 = new PointF(50.0F, 50.0F);
PointF point2 = new PointF(100.0F, 25.0F);
PointF point3 = new PointF(200.0F, 5.0F);
PointF point4 = new PointF(250.0F, 50.0F);
PointF point5 = new PointF(300.0F, 100.0F);
PointF point6 = new PointF(350.0F, 200.0F);
PointF point7 = new PointF(250.0F, 250.0F);
PointF[] curvePoints = { point1, point2, point3, point4, point5, point6, point7 };
// Define fill mode.
FillMode newFillMode = FillMode.Winding;
// Fill polygon to screen.
e.Graphics.FillPolygon(blueBrush, curvePoints, newFillMode);
return pixels;
}
相关问题
- 1. 多边形在C++
- 2. 多边形C++的凸性?
- 3. 多边形到多边形碰撞libgdx
- 4. 从多边形构造多边形
- 5. 多边形组中的STConvexHull()多边形
- 6. 将多边形转换为多边形
- 7. 多边形周边
- 8. 处理多边形的多边形算法,处理跨边界的多边形
- 9. 是多边形
- 10. 多边形
- 11. 由顶点数组多边形获取多边形的边
- 12. 从具有共线边的多边形中提取多边形
- 13. 多边形融合边
- 14. 多边形边上的点
- 15. 多边形的边界框
- 16. C#WPF - 使多边形封装文本
- 17. C#填写多边形的一面
- 18. C# - 随机旋转多边形
- 19. C++ 2D多边形碰撞检测
- 20. 多边形形状usercontrol
- 21. osmdroid多边形 - 三角形
- 22. 用于多个多边形的点多边形算法
- 23. 谷歌地图删除多个多边形的多边形
- 24. 隐形边框C#
- 25. 标签多边形
- 26. 多边形绘图
- 27. 点在多边形
- 28. 多边形交集
- 29. 绘制多边形
- 30. 提取多边形
也许我的问题是不准确的,我正在寻找如何用像素填充多边形并检索它们的位置。像体素化一样。 –
听起来像是在寻找[多边形填充算法](https://www.tutorialspoint.com/computer_graphics/polygon_filling_algorithm.htm)。那里列出了一些。如果要提取所有点的列表,可以:1.在绘制点时存储点,或2.将坐标附加到图像矩阵,将其平铺到一维列表中,然后执行一个'.Where (p => p.PixelValue == 0)'。 –
如果我有绘制多边形并填充它的简单函数,如何附加图像矩阵?见下面我的功能 –