Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 检测像素是否在边界内的算法_C#_Silverlight_Algorithm_Image_Image Processing - Fatal编程技术网

C# 检测像素是否在边界内的算法

C# 检测像素是否在边界内的算法,c#,silverlight,algorithm,image,image-processing,C#,Silverlight,Algorithm,Image,Image Processing,我们目前正在Silverlight中为图像处理创建一个简单的应用程序,我们遇到了一些障碍。我们希望用户能够选择图像的某个区域(通过在所选区域周围绘制手绘线或在其周围创建多边形),然后能够将效果应用于该选择中的像素 创建一个图像选择是很容易的,但是我们需要一个非常快速的算法来决定哪些像素应该被操作(例如,检测哪些像素在用户的选择中) 到目前为止,我们已经考虑了三种可能性,但我们确信必须有一种真正有效且快速的方法来做这件事,这比这些更好 1。逐像素。 我们只需检查图像中的每个像素,并检查它是否在用户

我们目前正在Silverlight中为图像处理创建一个简单的应用程序,我们遇到了一些障碍。我们希望用户能够选择图像的某个区域(通过在所选区域周围绘制手绘线或在其周围创建多边形),然后能够将效果应用于该选择中的像素

创建一个图像选择是很容易的,但是我们需要一个非常快速的算法来决定哪些像素应该被操作(例如,检测哪些像素在用户的选择中)

到目前为止,我们已经考虑了三种可能性,但我们确信必须有一种真正有效且快速的方法来做这件事,这比这些更好

1。逐像素。 我们只需检查图像中的每个像素,并检查它是否在用户选择范围内。显然这太慢了

2。使用直线交叉算法。 事情的类型

3。洪水填充。 沿选择的路径选择像素,然后在该选择中执行整体填充。这可能行得通

这一定是一个普遍解决的问题,所以我们猜测还有很多我们甚至没有想到的解决方案


您有什么建议?

您应该能够使用多边形创建剪切路径。Silverlight中用于描述多边形的迷你语言有很好的文档记录

更改图像副本上的像素(所有像素通常比某些像素更容易修改),然后使用剪切路径仅将更改的所需区域渲染回原始图像(可能会使用额外的缓冲位图来获得结果)


希望这有帮助。把这些想法抛出去,看看是否有什么坚持:)

洪水填充算法是一个不错的选择

看看这个实现:


您想要比O(n)更快的速度吗?智能溢流填充真的那么慢吗?你确定这真的是性能问题吗?我的意思是,即使ms paint也能很快地完成这类工作(绘制一个闭合多边形填充,这正是您所需要的)。您应该看看@Django:您能分享一下代码吗??我的处境和你一样。。