2014-05-23 2 views
-1

비트 맵에서 빨간색 픽셀을 찾고 비용을 줄이기 위해 알고리즘을 병렬화하고이 알고리즘에서 둘 이상의 코어를 작동시키는 방법을 찾았습니다.비트 맵에서 빨간색 픽셀을 검색하는 알고리즘을 병렬화하는 방법

기능 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

, 여기 봐 : HTTP : // msdn.microsoft.com/en-us/library/dd537608(v=vs.110).aspx –

+0

픽셀을 한 번 찾는 데 걸리는 시간이 심각한 문제가 아니라면 정말 해결 방법을 권하지 않습니다. 이 문제는 병렬 처리에 있습니다. 그것은 더 많은 자원을 소비합니다. –

+0

알고리즘은 시간이 아닌 많은 자원을 필요로하기 때문에 지속적으로 픽셀을 찾고 있습니다. – andrewbubblegum

답변

1

하기 만 한 번이 일을하고 있다면 그것은 작동하지 않습니다 이유는 각 하위 작업이 다른 작업에 상당히 의존하기 때문이다. 대부분의 스레드는 실제로 빨간색 픽셀을 포함하지 않는 영역을 검색하는 반면, 하나는 영역을 검색합니다.

뿐만 아니라 완료 될 때 각 스레드의 결과를 병합해야합니다. 그 중 하나만 발견하게됩니다.


그러나 많은 비트 맵에서 하나의 빨간색 픽셀을 검색하는 경우 실제로는 미세한 병렬 문제입니다. 내가 병렬 처리를 사용하는 데 필요한 경우

, 나는 아마 PLINQ를 사용하십시오 : 여기

는 몇 가지 문서입니다 : 시작점으로

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

+0

문제는 알고리즘이 단일 코어에서 계산된다는 것입니다. 새로운 방법은 모릅니다. – andrewbubblegum

+1

@andrewbubblegum 왜 문제입니까? –

+0

하나의 코어가 거의 완전히로드되어 있기 때문에 – andrewbubblegum