如何并行化我的算法搜索位图上的红色像素

时间:2014-05-23 19:47:11

标签: c# .net aforge

我在位图中找到了红色像素,如何并行化我的算法,这会使搜索成本降低,并在此算法上运行多个核心。

函数isRed在rgb中返回红色。

        Bitmap tmpImage1 = (Bitmap)eventArgs.Frame.Clone();

        int imageHeight = pictureBox1.Height;
        int imageWidth = pictureBox1.Width;

        for (int y = 0; y < imageHeight; y += 1)
        {
            for (int x = 0; x < imageWidth; x += 1)
            {
                if (isRed(tmpImage1.GetPixel(x, y)))
                {
                    MessageBox.Show("Red pixel found", "RP", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                }
            }
        }

1 个答案:

答案 0 :(得分:1)

如果你只是这样做一次,那么我建议不要使用并行性

它不起作用的原因是因为每个子任务都完全依赖于其他任务。你的大多数线程将搜索一个实际上不包含红色像素的区域,而一个区域将搜索一个区域。

不仅如此,你必须在完成后合并每个线程的结果,因为只有其中一个会找到它。


但是如果你在很多位图上搜索一个红色像素,那实际上是一个很好的并行问题。

如果我需要使用并行性,我可能会使用PLINQ:

以下是一些文档:

http://msdn.microsoft.com/en-us/library/dd460714%28v=vs.110%29.aspx