假设我有一个封闭的形状,如下图所示,我有边缘像素。填充形状的最有效方法是什么,即在形状内打开像素:
1)我有所有边缘像素
2)我有大部分边缘像素而不是所有边缘像素(如图所示)。
答案 0 :(得分:4)
构造凸包并添加缺少的像素。然后使用扫描线算法填充多边形。
答案 1 :(得分:2)
这一切都取决于具体情况。
如果手动创建帧缓冲区(基本上使用字节数组或类似的东西),则必须遍历要更改的所有像素。因此,例如,从行的最左边开始:
这当然只有你有所有边缘像素才有效。看看Marching Squares,可以提供一些帮助。
请更具体一点。 “填充形状的最有效方法”取决于您的基础渲染库,如果它是光栅图形等等......
修改的 注意,如果你可以生成边缘像素,算法要快得多,那么就不需要寻找边缘的开始。
答案 2 :(得分:2)
标准flood fill算法在凸形状上非常有效,并且可以处理形状比预期更不凸的情况。不幸的是,它需要不间断的轮廓。
答案 3 :(得分:1)
答案 4 :(得分:0)
在填充内部物之前,您需要确定确切的边界,在这种情况下,这将构成识别圆圈。
之后,您可以在圆圈周围查看每个像素的框,如果它实际上在其中。因为您必须对圆内的每个像素执行某些操作,并且圆中像素的数量与边界正方形的像素数呈线性关系(假设边界正方形的边具有某个常数的长度'半径*常数'),应该接近最佳状态。