算法:如何检测像素是否在边界内

3
我们目前正在为Silverlight创建一个简单的图像处理应用程序,但遇到了一些问题。我们希望用户能够选择图像的某个区域(通过绘制所选区域周围的自由线条或创建多边形),然后能够对该选择范围内的像素应用效果。
创建图像选择很容易,但我们需要一个非常快速的算法来决定哪些像素应该被操作(即检测哪些像素在用户的选择范围内)。
到目前为止,我们想到了三种可能性,但我们相信肯定有更高效和更快速的方法可以解决这个问题。
1.逐个像素。 我们只需遍历图像中的每个像素,并检查它是否在用户选择范围内。显然这太慢了!
2.使用线交叉算法。 这是这里所看到的东西。
3.泛洪填充。 选择沿着选择路径的像素,然后在该选择范围内执行泛洪填充。这可能很好地解决问题。
这一定是一个常见的问题,因此我们猜测还有许多解决方案我们没有想到。
你会推荐什么呢?

2
你想要比O(n)更快的东西吗?智能泛洪填充算法真的很慢吗? - Marcus Johansson
你确定这真的是性能问题吗?我的意思是,即使是 MS Paint 也可以非常快地完成这种操作(绘制一个填充的封闭多边形,这基本上就是你需要的)。 - korbes
你应该看一下http://nokola.com/blog/?tag=/EasyPainter - Denis
@Django:你能分享一下代码吗?我和你处于同样的情况。 - Abdur Rahman
2个回答

5

3
你应该可以使用你的多边形来创建一个剪切路径。Silverlight用于描述多边形的迷你语言已经有很好的文档记录。
修改图像的副本上的像素(通常比一些像素更容易修改),然后使用剪切路径将所需更改的区域渲染回原始图像(可能需要使用额外的缓冲位图来存储结果)。
希望这能帮到你。只是提供了一些想法,看看是否有任何可行之处 :)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接