我在位图中找到了红色像素,如何并行化我的算法,这会使搜索成本降低,并在此算法上运行多个核心。
函数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);
}
}
}
答案 0 :(得分:1)
如果你只是这样做一次,那么我建议不要使用并行性
它不起作用的原因是因为每个子任务都完全依赖于其他任务。你的大多数线程将搜索一个实际上不包含红色像素的区域,而一个区域将搜索一个区域。
不仅如此,你必须在完成后合并每个线程的结果,因为只有其中一个会找到它。
但是如果你在很多位图上搜索一个红色像素,那实际上是一个很好的并行问题。
如果我需要使用并行性,我可能会使用PLINQ:
以下是一些文档:
http://msdn.microsoft.com/en-us/library/dd460714%28v=vs.110%29.aspx