J'utilise la boucle Parallel.For pour traiter certaines images. Lorsque je tente de sauver l'image, parfois je reçois un exception-L'image ne parvient pas à enregistrer dans la boucle Parallel.For
une erreur générique est produite dans GDI +
Certaines images obtient enregistre alors cette exception vient au hasard après avoir sauvé quelques fichiers.
- J'ai essayé assigner l'objet image bitmap d'origine à une autre image bitmap, puis l'enregistrer
- essayé d'utiliser
Monitor.Enter
pour synchroniser entre l'enregistrement des fichiers
Ci-dessous mon code-
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' est toujours le même dans' Parallel.For'? – Backs
@Backs Non. Pardon. J'ai mis à jour le code, vérifiez maintenant. –
Je ne vois pas l'utilisation de la variable 'cnt'. Il semble, vous essayez de mettre à jour un fichier 14 fois en parallèle – Backs