J'utilise le code suivant pour comparer deux images et enregistrer le résultat. Dans la première manche, je crée avec succès et enregistrer l'image résultat, Mais dans la deuxième manche, je reçois l'exception suivante:C# only Deuxième bitmap.Save produire Une erreur générique s'est produite dans l'exception GDI +
An exception of type 'System.Runtime.InteropServices.ExternalException' occurred in System.Drawing.dll but was not handled in user code
Additional information: A generic error occurred in GDI+.
Le code:
MagickImage magickBaseImg = new MagickImage(new Bitmap(baseImageFileName));
MagickImage magickTargetImg = new MagickImage(new Bitmap(targetImageFileName));
var diffImg = new MagickImage();
magickBaseImg.Compare(magickTargetImg, ErrorMetric.RootMeanSquared, diffImg, Channels.Red);
Bitmap ImgToSave = diffImg.ToBitmap();
DateTime currentTime = DateTime.Now;
String differencesImageSavingPath = @"C:\test\DiffImage" + currentTime.ToString("ddMMyyyyHHmm") + ".bmp";
**ImgToSave.Save(differencesImageSavingPath, System.Drawing.Imaging.ImageFormat.Bmp);**
differencesImageFileName = differencesImageSavingPath;
DiffrenceImage.Source = new BitmapImage(new Uri(differencesImageFileName));
La ligne qui marque avec ** est la ligne qui lance l'exception dans la deuxième manche. déjà lu et essayé le fixer avec « l'aide » et .Dispose comme écrit ici: A Generic error occurred in GDI+ in Bitmap.Save method et ici: A generic error occurred in GDI+, JPEG Image to MemoryStream
Mais il ne fonctionne pas.
Par exemple, le code suivant ne fonctionne pas non plus:
MagickImage magickBaseImg = new MagickImage(new Bitmap(baseImageFileName));
MagickImage magickTargetImg = new MagickImage(new Bitmap(targetImageFileName));
var diffImg = new MagickImage();
magickBaseImg.Compare(magickTargetImg, ErrorMetric.RootMeanSquared, diffImg, Channels.Red);
Bitmap ImgToSave = diffImg.ToBitmap();
DateTime currentTime = DateTime.Now;
String differencesImageSavingPath = @"C:\test\DiffImage" + currentTime.ToString("ddMMyyyyHHmm") + ".bmp";
using (var tempImg = new Bitmap(ImgToSave)) {
tempImg.Save(differencesImageSavingPath, System.Drawing.Imaging.ImageFormat.Bmp);
}
differencesImageFileName = differencesImageSavingPath;
DiffrenceImage.Source = new BitmapImage(new Uri(differencesImageFileName));
Bien sûr l'image n'est pas ouverte ailleurs? – BugFinder
tempImg ne peut pas être ouvert - J'ai créé une nouvelle instance et en l'invoquant également dans l'instruction "using" –
qui ne vous empêche toujours pas de l'utiliser ailleurs – BugFinder