다음 코드를 병렬화 하려면 어떻게 해야하나요??

답변됨 다음 코드를 병렬화 하려면 어떻게 해야하나요??

  • 2012년 5월 23일 수요일 오전 5:23
     
     

    Bitmap image1 = new Bitmap(@"d:\image001.jpg", true);

    for (int x = 0; x < image1.Width; x++)
    {
        for (int y = 0; y < image1.Height; y++)
        {
            Color pixelColor = image1.GetPixel(x, y);
            Color newColor = Color.FromArgb(0, pixelColor.G, pixelColor.B);
            image1.SetPixel(x, y, newColor);
        }
    }

    코드는 위에서 보다시피

    이미지 파일하나 열어서 모든 픽셀 순환하면서

    각 픽셀의 값을 특정 픽셀값으로 변경하는 루틴입니다.

    코드는 간단한데...

    동작은 간단하게 되질 않네요... ^^;;

    Parallel.For()를 써봤는데... 하나의 이미지를 여러 스레드에서 사용한다면서 에러를 토하네요...

    PLINQ든 TPL이든 방법을 써서 병렬화 처리를 하는 방법은 뭐가 있을까요??

    C#을 접한지 얼마 안된 초보이다 보니 다양한 방법을 적용하기가 버겁네요.

    고수님들의 조언 부탁드립니다. (__)


    JWBaek

모든 응답

  • 2012년 5월 24일 목요일 오후 12:17
     
     답변됨

    쓰다 보니 답변이 길어져서 아예 다음과 같은 글로 하나 정리를 해봤습니다.

    System.Drawing.Bitmap 데이터를 Parallel.For로 처리하는 방법
    ; http://www.sysnet.pe.kr/2/0/1293

    보시고, 혹시 더 궁금한 사항이 있으시면 덧글 남겨주세요. ^^

    • 답변으로 표시됨 Jina LeeModerator 2012년 5월 30일 수요일 오전 6:03
    •  
  • 2012년 5월 25일 금요일 오전 7:32
     
     

    와우~

    일일이 샘플 테스트까지 작성하셔서 비교까지 해서 보여주시니

    정말 몸둘바를 모르겠습니다.

    Bitmap을 병렬처리하기 위해선 비트맵데이터에 직접 접근해야하는군요..

    훔...그래야 할거라 예상은 했었는데...

    암튼 정성태님의 코드를 보고 많은 정보를 얻었습니다.

    진심으로 감사합니다. (__)


    JWBaek


    • 편집됨 JW_Destroy 2012년 5월 25일 금요일 오전 7:33
    •