1
일부 이미지를 처리하기 위해 Parallel.For 루프를 사용하고 있습니다. 내가 이미지를 저장하려고하면, 때때로 나는 예외 중이미지가 Parallel.For 루프에 저장되지 않습니다.
일반 오류가 +
일부 이미지 가져 GDI 발생 후이 예외가 몇 개의 파일을 저장 한 후 무작위로 제공 절약 할 수.
- 나는 나의 코드 - 된 다른 비트 맵 이미지에 원래 비트 맵 이미지 개체를 할당 한 후 파일을 아래
을 저장 사이에 동기화 Monitor.Enter
를 사용하여 시도
Parallel.For(0, 14, cnt =>
{
using (Bitmap originalImage = (Bitmap)Bitmap.FromFile(@imagePath))
{
for (int i = 0; i < originalImage.Width; i++)
{
for (int x = 0; x < originalImage.Height; x++)
{
System.Drawing.Color oc = originalImage.GetPixel(i, x);
int gray = (int)((oc.R * 0.3) + (oc.G * 0.59) + (oc.B * 0.11));
System.Drawing.Color nc = System.Drawing.Color.FromArgb(oc.A, gray, gray, gray);
originalImage.SetPixel(i, x, nc);
}
}
try
{
//Bitmap grayscaleImage = originalImage;
//grayscaleImage.Save(@processesImagesPath + DateTime.Now.ToString("dd-MM-yyyy_hh.mm.ss") + ".jpg"); //line of exception
//above lines did not work
Monitor.Enter(originalImage);
originalImage.Save(@processesImagesPath + DateTime.Now.ToString("dd-MM-yyyy_hh.mm.ss") + ".jpg"); //line of exception
}
finally
{
Monitor.Exit(originalImage);
}
}
});
는'imagePath' 항상 Parallel.For''에서 동일? – Backs
@Backs 아니요. 죄송합니다. 코드를 업데이트하고 지금 확인하십시오. –
'cnt' 변수의 사용법이 보이지 않습니다. 그것은 하나의 파일을 14 번 병렬로 업데이트하려고합니다. – Backs