在椭圆区域中应用堆栈模糊(或者:从上到下绘制椭圆)

时间:2013-12-03 05:11:03

标签: javascript algorithm graphics

首先:如果this algorithm中的排序无关紧要,我很想知道。虽然我没有完全理解算法,但是我注意到循环中的x和y确实会影响输出,我的假设是以任意像素顺序执行算法将导致它的行为不正确。 (撇开不成矩形的可能性导致问题!)

我想知道的是:如何有效地从左到右,从上到下的顺序生成椭圆中包含的坐标集? Bresenham圆/椭圆算法很有用,但是我无法纠缠它们自上而下执行。

除了Bresenham方法之外,另一种方法是通过递增/递减一个坐标来跟踪边缘,直到它越过边界,但是我很难简化相关的方程式以避免做一堆三角函数或平方根计算。这可能是过早的优化,但似乎解决方案很容易实现......

我的最终目标:根据鼠标输入在Canvas对象上绘制一个椭圆形选区,并将模糊应用于所选区域。如果另一种方法更适合,请指出我正确的方向!

奖金:任意轮换

编辑:我觉得无法回复你的答案,这有点傻,但这是一个聪明的方法。我会看到我能做到的;谢谢!

1 个答案:

答案 0 :(得分:0)

理论上,您可以更改算法,以便更改每列和每行的起始位置和结束位置,以便它可以考虑椭圆选择中包含的像素。这种方法的问题在于它会为内循环添加相当多的附加条件,这会降低性能。

我建议的方法是首先制作要模糊的位图的副本(以避免不必要的计算,只需复制椭圆的边界矩形下的区域)。然后模糊整个位图,包括椭圆外的区域。然后将模糊的地图合成回原始地图,这次使用椭圆作为蒙版。

这种方法的好处是你可以使用任何形状作为模糊面具。

以下是使用EaselJS实现类似效果的示例(EaselJS中使用的模糊实际上是StackBlur):http://www.createjs.com/#!/EaselJS/demos/alphamask